diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp
index cbc2bf08..2ab2d4fc 100644
--- a/src/WSRequestHandler.cpp
+++ b/src/WSRequestHandler.cpp
@@ -29,139 +29,21 @@
 using namespace std::placeholders;
 
 const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap{
+	// Category: General
 	{ "GetVersion", &WSRequestHandler::GetVersion },
 	{ "GetAuthRequired", &WSRequestHandler::GetAuthRequired },
 	{ "Authenticate", &WSRequestHandler::Authenticate },
-
-	{ "GetStats", &WSRequestHandler::GetStats },
 	{ "SetHeartbeat", &WSRequestHandler::SetHeartbeat },
-	{ "GetVideoInfo", &WSRequestHandler::GetVideoInfo },
-	{ "OpenProjector", &WSRequestHandler::OpenProjector },
-
 	{ "SetFilenameFormatting", &WSRequestHandler::SetFilenameFormatting },
 	{ "GetFilenameFormatting", &WSRequestHandler::GetFilenameFormatting },
-
+	{ "GetStats", &WSRequestHandler::GetStats },
 	{ "BroadcastCustomMessage", &WSRequestHandler::BroadcastCustomMessage },
-
+	{ "GetVideoInfo", &WSRequestHandler::GetVideoInfo },
+	{ "OpenProjector", &WSRequestHandler::OpenProjector },
 	{ "TriggerHotkeyByName", &WSRequestHandler::TriggerHotkeyByName },
 	{ "TriggerHotkeyBySequence", &WSRequestHandler::TriggerHotkeyBySequence },
 
-	{ "SetCurrentScene", &WSRequestHandler::SetCurrentScene },
-	{ "GetCurrentScene", &WSRequestHandler::GetCurrentScene },
-	{ "GetSceneList", &WSRequestHandler::GetSceneList },
-	{ "CreateScene", &WSRequestHandler::CreateScene },
-	{ "SetSceneTransitionOverride", &WSRequestHandler::SetSceneTransitionOverride },
-	{ "RemoveSceneTransitionOverride", &WSRequestHandler::RemoveSceneTransitionOverride },
-	{ "GetSceneTransitionOverride", &WSRequestHandler::GetSceneTransitionOverride },
-
-	{ "SetSourceRender", &WSRequestHandler::SetSceneItemRender }, // Retrocompat
-	{ "GetSceneItemList", &WSRequestHandler::GetSceneItemList },
-	{ "SetSceneItemRender", &WSRequestHandler::SetSceneItemRender },
-	{ "GetSceneItemProperties", &WSRequestHandler::GetSceneItemProperties },
-	{ "SetSceneItemProperties", &WSRequestHandler::SetSceneItemProperties },
-	{ "ResetSceneItem", &WSRequestHandler::ResetSceneItem },
-	{ "DeleteSceneItem", &WSRequestHandler::DeleteSceneItem },
-	{ "AddSceneItem", &WSRequestHandler::AddSceneItem },
-	{ "DuplicateSceneItem", &WSRequestHandler::DuplicateSceneItem },
-	{ "ReorderSceneItems", &WSRequestHandler::ReorderSceneItems },
-
-	{ "GetStreamingStatus", &WSRequestHandler::GetStreamingStatus },
-	{ "StartStopStreaming", &WSRequestHandler::StartStopStreaming },
-	{ "StartStopRecording", &WSRequestHandler::StartStopRecording },
-
-	{ "StartStreaming", &WSRequestHandler::StartStreaming },
-	{ "StopStreaming", &WSRequestHandler::StopStreaming },
-
-	{ "GetRecordingStatus", &WSRequestHandler::GetRecordingStatus },
-	{ "StartRecording", &WSRequestHandler::StartRecording },
-	{ "StopRecording", &WSRequestHandler::StopRecording },
-	{ "PauseRecording", &WSRequestHandler::PauseRecording },
-	{ "ResumeRecording", &WSRequestHandler::ResumeRecording },
-
-	{ "GetReplayBufferStatus", &WSRequestHandler::GetReplayBufferStatus },
-	{ "StartStopReplayBuffer", &WSRequestHandler::StartStopReplayBuffer },
-	{ "StartReplayBuffer", &WSRequestHandler::StartReplayBuffer },
-	{ "StopReplayBuffer", &WSRequestHandler::StopReplayBuffer },
-	{ "SaveReplayBuffer", &WSRequestHandler::SaveReplayBuffer },
-
-	{ "SetRecordingFolder", &WSRequestHandler::SetRecordingFolder },
-	{ "GetRecordingFolder", &WSRequestHandler::GetRecordingFolder },
-
-	{ "GetTransitionList", &WSRequestHandler::GetTransitionList },
-	{ "GetCurrentTransition", &WSRequestHandler::GetCurrentTransition },
-	{ "SetCurrentTransition", &WSRequestHandler::SetCurrentTransition },
-	{ "SetTransitionDuration", &WSRequestHandler::SetTransitionDuration },
-	{ "GetTransitionDuration", &WSRequestHandler::GetTransitionDuration },
-	{ "GetTransitionPosition", &WSRequestHandler::GetTransitionPosition },
-	{ "GetTransitionSettings", &WSRequestHandler::GetTransitionSettings },
-	{ "SetTransitionSettings", &WSRequestHandler::SetTransitionSettings },
-	{ "ReleaseTBar", &WSRequestHandler::ReleaseTBar	},
-	{ "SetTBarPosition", &WSRequestHandler::SetTBarPosition	},
-
-	{ "CreateSource", &WSRequestHandler::CreateSource },
-	{ "SetVolume", &WSRequestHandler::SetVolume },
-	{ "GetVolume", &WSRequestHandler::GetVolume },
-	{ "ToggleMute", &WSRequestHandler::ToggleMute },
-	{ "SetMute", &WSRequestHandler::SetMute },
-	{ "GetMute", &WSRequestHandler::GetMute },
-	{ "GetAudioActive", &WSRequestHandler::GetAudioActive },
-	{ "SetSourceName", &WSRequestHandler::SetSourceName },
-	{ "SetSyncOffset", &WSRequestHandler::SetSyncOffset },
-	{ "GetSyncOffset", &WSRequestHandler::GetSyncOffset },
-	{ "GetSpecialSources", &WSRequestHandler::GetSpecialSources },
-	{ "GetSourcesList", &WSRequestHandler::GetSourcesList },
-	{ "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList },
-	{ "GetSourceSettings", &WSRequestHandler::GetSourceSettings },
-	{ "SetSourceSettings", &WSRequestHandler::SetSourceSettings },
-	{ "GetAudioMonitorType", &WSRequestHandler::GetAudioMonitorType },
-	{ "SetAudioMonitorType", &WSRequestHandler::SetAudioMonitorType },
-	{ "GetSourceDefaultSettings", &WSRequestHandler::GetSourceDefaultSettings },
-	{ "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot },
-
-	{ "GetSourceFilters", &WSRequestHandler::GetSourceFilters },
-	{ "GetSourceFilterInfo", &WSRequestHandler::GetSourceFilterInfo },
-	{ "AddFilterToSource", &WSRequestHandler::AddFilterToSource },
-	{ "RemoveFilterFromSource", &WSRequestHandler::RemoveFilterFromSource },
-	{ "ReorderSourceFilter", &WSRequestHandler::ReorderSourceFilter },
-	{ "MoveSourceFilter", &WSRequestHandler::MoveSourceFilter },
-	{ "SetSourceFilterSettings", &WSRequestHandler::SetSourceFilterSettings },
-	{ "SetSourceFilterVisibility", &WSRequestHandler::SetSourceFilterVisibility },
-
-	{ "SetCurrentSceneCollection", &WSRequestHandler::SetCurrentSceneCollection },
-	{ "GetCurrentSceneCollection", &WSRequestHandler::GetCurrentSceneCollection },
-	{ "ListSceneCollections", &WSRequestHandler::ListSceneCollections },
-
-	{ "SetCurrentProfile", &WSRequestHandler::SetCurrentProfile },
-	{ "GetCurrentProfile", &WSRequestHandler::GetCurrentProfile },
-	{ "ListProfiles", &WSRequestHandler::ListProfiles },
-
-	{ "SetStreamSettings", &WSRequestHandler::SetStreamSettings },
-	{ "GetStreamSettings", &WSRequestHandler::GetStreamSettings },
-	{ "SaveStreamSettings", &WSRequestHandler::SaveStreamSettings },
-	{ "SendCaptions", &WSRequestHandler::SendCaptions },
-
-	{ "GetStudioModeStatus", &WSRequestHandler::GetStudioModeStatus },
-	{ "GetPreviewScene", &WSRequestHandler::GetPreviewScene },
-	{ "SetPreviewScene", &WSRequestHandler::SetPreviewScene },
-	{ "TransitionToProgram", &WSRequestHandler::TransitionToProgram },
-	{ "EnableStudioMode", &WSRequestHandler::EnableStudioMode },
-	{ "DisableStudioMode", &WSRequestHandler::DisableStudioMode },
-	{ "ToggleStudioMode", &WSRequestHandler::ToggleStudioMode },
-
-	{ "SetTextGDIPlusProperties", &WSRequestHandler::SetTextGDIPlusProperties },
-	{ "GetTextGDIPlusProperties", &WSRequestHandler::GetTextGDIPlusProperties },
-
-	{ "SetTextFreetype2Properties", &WSRequestHandler::SetTextFreetype2Properties },
-	{ "GetTextFreetype2Properties", &WSRequestHandler::GetTextFreetype2Properties },
-
-	{ "GetBrowserSourceProperties", &WSRequestHandler::GetBrowserSourceProperties },
-	{ "SetBrowserSourceProperties", &WSRequestHandler::SetBrowserSourceProperties },
-
-	{ "ListOutputs", &WSRequestHandler::ListOutputs },
-	{ "GetOutputInfo", &WSRequestHandler::GetOutputInfo },
-	{ "StartOutput", &WSRequestHandler::StartOutput },
-	{ "StopOutput", &WSRequestHandler::StopOutput },
-
+	// Category: Media Control
 	{ "PlayPauseMedia", &WSRequestHandler::PlayPauseMedia },
 	{ "RestartMedia", &WSRequestHandler::RestartMedia },
 	{ "StopMedia", &WSRequestHandler::StopMedia },
@@ -172,7 +54,127 @@ const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap{
 	{ "SetMediaTime", &WSRequestHandler::SetMediaTime },
 	{ "ScrubMedia", &WSRequestHandler::ScrubMedia },
 	{ "GetMediaState", &WSRequestHandler::GetMediaState },
-	{ "GetMediaSourcesList", &WSRequestHandler::GetMediaSourcesList }
+	{ "GetMediaSourcesList", &WSRequestHandler::GetMediaSourcesList },
+
+	// Category: Outputs
+	{ "ListOutputs", &WSRequestHandler::ListOutputs },
+	{ "GetOutputInfo", &WSRequestHandler::GetOutputInfo },
+	{ "StartOutput", &WSRequestHandler::StartOutput },
+	{ "StopOutput", &WSRequestHandler::StopOutput },
+
+	// Category: Profiles
+	{ "SetCurrentProfile", &WSRequestHandler::SetCurrentProfile },
+	{ "GetCurrentProfile", &WSRequestHandler::GetCurrentProfile },
+	{ "ListProfiles", &WSRequestHandler::ListProfiles },
+
+	// Category: Recording
+	{ "GetRecordingStatus", &WSRequestHandler::GetRecordingStatus },
+	{ "StartStopRecording", &WSRequestHandler::StartStopRecording },
+	{ "StartRecording", &WSRequestHandler::StartRecording },
+	{ "StopRecording", &WSRequestHandler::StopRecording },
+	{ "PauseRecording", &WSRequestHandler::PauseRecording },
+	{ "ResumeRecording", &WSRequestHandler::ResumeRecording },
+	{ "SetRecordingFolder", &WSRequestHandler::SetRecordingFolder },
+	{ "GetRecordingFolder", &WSRequestHandler::GetRecordingFolder },
+
+	// Category: Replay Buffer
+	{ "GetReplayBufferStatus", &WSRequestHandler::GetReplayBufferStatus },
+	{ "StartStopReplayBuffer", &WSRequestHandler::StartStopReplayBuffer },
+	{ "StartReplayBuffer", &WSRequestHandler::StartReplayBuffer },
+	{ "StopReplayBuffer", &WSRequestHandler::StopReplayBuffer },
+	{ "SaveReplayBuffer", &WSRequestHandler::SaveReplayBuffer },
+
+	// Category: Scene Collections
+	{ "SetCurrentSceneCollection", &WSRequestHandler::SetCurrentSceneCollection },
+	{ "GetCurrentSceneCollection", &WSRequestHandler::GetCurrentSceneCollection },
+	{ "ListSceneCollections", &WSRequestHandler::ListSceneCollections },
+
+	// Category: Scene Items
+	{ "GetSceneItemList", &WSRequestHandler::GetSceneItemList },
+	{ "GetSceneItemProperties", &WSRequestHandler::GetSceneItemProperties },
+	{ "SetSceneItemProperties", &WSRequestHandler::SetSceneItemProperties },
+	{ "ResetSceneItem", &WSRequestHandler::ResetSceneItem },
+	{ "SetSceneItemRender", &WSRequestHandler::SetSceneItemRender },
+	{ "SetSourceRender", &WSRequestHandler::SetSceneItemRender }, // Retrocompat TODO: Remove in 5.0.0
+	{ "DeleteSceneItem", &WSRequestHandler::DeleteSceneItem },
+	{ "AddSceneItem", &WSRequestHandler::AddSceneItem },
+	{ "DuplicateSceneItem", &WSRequestHandler::DuplicateSceneItem },
+
+	// Category: Scenes
+	{ "SetCurrentScene", &WSRequestHandler::SetCurrentScene },
+	{ "GetCurrentScene", &WSRequestHandler::GetCurrentScene },
+	{ "GetSceneList", &WSRequestHandler::GetSceneList },
+	{ "CreateScene", &WSRequestHandler::CreateScene },
+	{ "ReorderSceneItems", &WSRequestHandler::ReorderSceneItems },
+	{ "SetSceneTransitionOverride", &WSRequestHandler::SetSceneTransitionOverride },
+	{ "RemoveSceneTransitionOverride", &WSRequestHandler::RemoveSceneTransitionOverride },
+	{ "GetSceneTransitionOverride", &WSRequestHandler::GetSceneTransitionOverride },
+
+	// Category: Sources
+	{ "CreateSource", &WSRequestHandler::CreateSource },
+	{ "GetSourcesList", &WSRequestHandler::GetSourcesList },
+	{ "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList },
+	{ "GetVolume", &WSRequestHandler::GetVolume },
+	{ "SetVolume", &WSRequestHandler::SetVolume },
+	{ "GetMute", &WSRequestHandler::GetMute },
+	{ "SetMute", &WSRequestHandler::SetMute },
+	{ "ToggleMute", &WSRequestHandler::ToggleMute },
+	{ "GetAudioActive", &WSRequestHandler::GetAudioActive },
+	{ "SetSourceName", &WSRequestHandler::SetSourceName },
+	{ "SetSyncOffset", &WSRequestHandler::SetSyncOffset },
+	{ "GetSyncOffset", &WSRequestHandler::GetSyncOffset },
+	{ "GetSourceSettings", &WSRequestHandler::GetSourceSettings },
+	{ "SetSourceSettings", &WSRequestHandler::SetSourceSettings },
+	{ "GetTextGDIPlusProperties", &WSRequestHandler::GetTextGDIPlusProperties },
+	{ "SetTextGDIPlusProperties", &WSRequestHandler::SetTextGDIPlusProperties },
+	{ "GetTextFreetype2Properties", &WSRequestHandler::GetTextFreetype2Properties },
+	{ "SetTextFreetype2Properties", &WSRequestHandler::SetTextFreetype2Properties },
+	{ "GetBrowserSourceProperties", &WSRequestHandler::GetBrowserSourceProperties },
+	{ "SetBrowserSourceProperties", &WSRequestHandler::SetBrowserSourceProperties },
+	{ "GetSpecialSources", &WSRequestHandler::GetSpecialSources },
+	{ "GetSourceFilters", &WSRequestHandler::GetSourceFilters },
+	{ "GetSourceFilterInfo", &WSRequestHandler::GetSourceFilterInfo },
+	{ "AddFilterToSource", &WSRequestHandler::AddFilterToSource },
+	{ "RemoveFilterFromSource", &WSRequestHandler::RemoveFilterFromSource },
+	{ "ReorderSourceFilter", &WSRequestHandler::ReorderSourceFilter },
+	{ "MoveSourceFilter", &WSRequestHandler::MoveSourceFilter },
+	{ "SetSourceFilterSettings", &WSRequestHandler::SetSourceFilterSettings },
+	{ "SetSourceFilterVisibility", &WSRequestHandler::SetSourceFilterVisibility },
+	{ "GetAudioMonitorType", &WSRequestHandler::GetAudioMonitorType },
+	{ "SetAudioMonitorType", &WSRequestHandler::SetAudioMonitorType },
+	{ "GetSourceDefaultSettings", &WSRequestHandler::GetSourceDefaultSettings },
+	{ "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot },
+
+	// Category: Streaming
+	{ "GetStreamingStatus", &WSRequestHandler::GetStreamingStatus },
+	{ "StartStopStreaming", &WSRequestHandler::StartStopStreaming },
+	{ "StartStreaming", &WSRequestHandler::StartStreaming },
+	{ "StopStreaming", &WSRequestHandler::StopStreaming },
+	{ "SetStreamSettings", &WSRequestHandler::SetStreamSettings },
+	{ "GetStreamSettings", &WSRequestHandler::GetStreamSettings },
+	{ "SaveStreamSettings", &WSRequestHandler::SaveStreamSettings },
+	{ "SendCaptions", &WSRequestHandler::SendCaptions },
+
+	// Category: Studio Mode
+	{ "GetStudioModeStatus", &WSRequestHandler::GetStudioModeStatus },
+	{ "GetPreviewScene", &WSRequestHandler::GetPreviewScene },
+	{ "SetPreviewScene", &WSRequestHandler::SetPreviewScene },
+	{ "TransitionToProgram", &WSRequestHandler::TransitionToProgram },
+	{ "EnableStudioMode", &WSRequestHandler::EnableStudioMode },
+	{ "DisableStudioMode", &WSRequestHandler::DisableStudioMode },
+	{ "ToggleStudioMode", &WSRequestHandler::ToggleStudioMode },
+
+	// Category: Transitions
+	{ "GetTransitionList", &WSRequestHandler::GetTransitionList },
+	{ "GetCurrentTransition", &WSRequestHandler::GetCurrentTransition },
+	{ "SetCurrentTransition", &WSRequestHandler::SetCurrentTransition },
+	{ "SetTransitionDuration", &WSRequestHandler::SetTransitionDuration },
+	{ "GetTransitionDuration", &WSRequestHandler::GetTransitionDuration },
+	{ "GetTransitionPosition", &WSRequestHandler::GetTransitionPosition },
+	{ "GetTransitionSettings", &WSRequestHandler::GetTransitionSettings },
+	{ "SetTransitionSettings", &WSRequestHandler::SetTransitionSettings },
+	{ "ReleaseTBar", &WSRequestHandler::ReleaseTBar	},
+	{ "SetTBarPosition", &WSRequestHandler::SetTBarPosition	}
 };
 
 const QSet<QString> WSRequestHandler::authNotRequired {
diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h
index 6d17e139..40207a4f 100644
--- a/src/WSRequestHandler.h
+++ b/src/WSRequestHandler.h
@@ -47,138 +47,21 @@ class WSRequestHandler {
 		static const QHash<QString, RpcMethodHandler> messageMap;
 		static const QSet<QString> authNotRequired;
 
+		// Category: General
 		RpcResponse GetVersion(const RpcRequest&);
 		RpcResponse GetAuthRequired(const RpcRequest&);
 		RpcResponse Authenticate(const RpcRequest&);
-
-		RpcResponse GetStats(const RpcRequest&);
 		RpcResponse SetHeartbeat(const RpcRequest&);
-		RpcResponse GetVideoInfo(const RpcRequest&);
-		RpcResponse OpenProjector(const RpcRequest&);
-
 		RpcResponse SetFilenameFormatting(const RpcRequest&);
 		RpcResponse GetFilenameFormatting(const RpcRequest&);
-
+		RpcResponse GetStats(const RpcRequest&);
 		RpcResponse BroadcastCustomMessage(const RpcRequest&);
-
+		RpcResponse GetVideoInfo(const RpcRequest&);
+		RpcResponse OpenProjector(const RpcRequest&);
 		RpcResponse TriggerHotkeyByName(const RpcRequest&);
 		RpcResponse TriggerHotkeyBySequence(const RpcRequest&);
 
-		RpcResponse SetCurrentScene(const RpcRequest&);
-		RpcResponse GetCurrentScene(const RpcRequest&);
-		RpcResponse GetSceneList(const RpcRequest&);
-		RpcResponse CreateScene(const RpcRequest&);
-		RpcResponse SetSceneTransitionOverride(const RpcRequest&);
-		RpcResponse RemoveSceneTransitionOverride(const RpcRequest&);
-		RpcResponse GetSceneTransitionOverride(const RpcRequest&);
-
-		RpcResponse GetSceneItemList(const RpcRequest&);
-		RpcResponse SetSceneItemRender(const RpcRequest&);
-		RpcResponse GetSceneItemProperties(const RpcRequest&);
-		RpcResponse SetSceneItemProperties(const RpcRequest&);
-		RpcResponse ResetSceneItem(const RpcRequest&);
-		RpcResponse DuplicateSceneItem(const RpcRequest&);
-		RpcResponse DeleteSceneItem(const RpcRequest&);
-		RpcResponse AddSceneItem(const RpcRequest&);
-		RpcResponse ReorderSceneItems(const RpcRequest&);
-
-		RpcResponse GetStreamingStatus(const RpcRequest&);
-		RpcResponse StartStopStreaming(const RpcRequest&);
-		RpcResponse StartStopRecording(const RpcRequest&);
-
-		RpcResponse StartStreaming(const RpcRequest&);
-		RpcResponse StopStreaming(const RpcRequest&);
-
-		RpcResponse GetRecordingStatus(const RpcRequest&);
-		RpcResponse StartRecording(const RpcRequest&);
-		RpcResponse StopRecording(const RpcRequest&);
-		RpcResponse PauseRecording(const RpcRequest&);
-		RpcResponse ResumeRecording(const RpcRequest&);
-
-		RpcResponse GetReplayBufferStatus(const RpcRequest&);
-		RpcResponse StartStopReplayBuffer(const RpcRequest&);
-		RpcResponse StartReplayBuffer(const RpcRequest&);
-		RpcResponse StopReplayBuffer(const RpcRequest&);
-		RpcResponse SaveReplayBuffer(const RpcRequest&);
-
-		RpcResponse SetRecordingFolder(const RpcRequest&);
-		RpcResponse GetRecordingFolder(const RpcRequest&);
-
-		RpcResponse GetTransitionList(const RpcRequest&);
-		RpcResponse GetCurrentTransition(const RpcRequest&);
-		RpcResponse SetCurrentTransition(const RpcRequest&);
-		RpcResponse SetTransitionDuration(const RpcRequest&);
-		RpcResponse GetTransitionDuration(const RpcRequest&);
-		RpcResponse GetTransitionPosition(const RpcRequest&);
-		RpcResponse GetTransitionSettings(const RpcRequest&);
-		RpcResponse SetTransitionSettings(const RpcRequest&);
-		RpcResponse ReleaseTBar(const RpcRequest&);
-		RpcResponse SetTBarPosition(const RpcRequest&);
-
-		RpcResponse CreateSource(const RpcRequest&);
-		RpcResponse SetVolume(const RpcRequest&);
-		RpcResponse GetVolume(const RpcRequest&);
-		RpcResponse ToggleMute(const RpcRequest&);
-		RpcResponse SetMute(const RpcRequest&);
-		RpcResponse GetMute(const RpcRequest&);
-		RpcResponse GetAudioActive(const RpcRequest&);
-		RpcResponse SetSourceName(const RpcRequest&);
-		RpcResponse SetSyncOffset(const RpcRequest&);
-		RpcResponse GetSyncOffset(const RpcRequest&);
-		RpcResponse GetSpecialSources(const RpcRequest&);
-		RpcResponse GetSourcesList(const RpcRequest&);
-		RpcResponse GetSourceTypesList(const RpcRequest&);
-		RpcResponse GetSourceSettings(const RpcRequest&);
-		RpcResponse SetSourceSettings(const RpcRequest&);
-		RpcResponse GetAudioMonitorType(const RpcRequest&);
-		RpcResponse SetAudioMonitorType(const RpcRequest&);
-		RpcResponse GetSourceDefaultSettings(const RpcRequest&);
-		RpcResponse TakeSourceScreenshot(const RpcRequest&);
-
-		RpcResponse GetSourceFilters(const RpcRequest&);
-		RpcResponse GetSourceFilterInfo(const RpcRequest&);
-		RpcResponse AddFilterToSource(const RpcRequest&);
-		RpcResponse RemoveFilterFromSource(const RpcRequest&);
-		RpcResponse ReorderSourceFilter(const RpcRequest&);
-		RpcResponse MoveSourceFilter(const RpcRequest&);
-		RpcResponse SetSourceFilterSettings(const RpcRequest&);
-		RpcResponse SetSourceFilterVisibility(const RpcRequest&);
-
-		RpcResponse SetCurrentSceneCollection(const RpcRequest&);
-		RpcResponse GetCurrentSceneCollection(const RpcRequest&);
-		RpcResponse ListSceneCollections(const RpcRequest&);
-
-		RpcResponse SetCurrentProfile(const RpcRequest&);
-		RpcResponse GetCurrentProfile(const RpcRequest&);
-		RpcResponse ListProfiles(const RpcRequest&);
-
-		RpcResponse SetStreamSettings(const RpcRequest&);
-		RpcResponse GetStreamSettings(const RpcRequest&);
-		RpcResponse SaveStreamSettings(const RpcRequest&);
-		RpcResponse SendCaptions(const RpcRequest&);
-
-		RpcResponse GetStudioModeStatus(const RpcRequest&);
-		RpcResponse GetPreviewScene(const RpcRequest&);
-		RpcResponse SetPreviewScene(const RpcRequest&);
-		RpcResponse TransitionToProgram(const RpcRequest&);
-		RpcResponse EnableStudioMode(const RpcRequest&);
-		RpcResponse DisableStudioMode(const RpcRequest&);
-		RpcResponse ToggleStudioMode(const RpcRequest&);
-
-		RpcResponse SetTextGDIPlusProperties(const RpcRequest&);
-		RpcResponse GetTextGDIPlusProperties(const RpcRequest&);
-
-		RpcResponse SetTextFreetype2Properties(const RpcRequest&);
-		RpcResponse GetTextFreetype2Properties(const RpcRequest&);
-
-		RpcResponse SetBrowserSourceProperties(const RpcRequest&);
-		RpcResponse GetBrowserSourceProperties(const RpcRequest&);
-
-		RpcResponse ListOutputs(const RpcRequest&);
-		RpcResponse GetOutputInfo(const RpcRequest&);
-		RpcResponse StartOutput(const RpcRequest&);
-		RpcResponse StopOutput(const RpcRequest&);
-
+		// Category: Media Control
 		RpcResponse PlayPauseMedia(const RpcRequest&);
 		RpcResponse RestartMedia(const RpcRequest&);
 		RpcResponse StopMedia(const RpcRequest&);
@@ -190,4 +73,123 @@ class WSRequestHandler {
 		RpcResponse ScrubMedia(const RpcRequest&);
 		RpcResponse GetMediaState(const RpcRequest&);
 		RpcResponse GetMediaSourcesList(const RpcRequest&);
+
+		// Category: Outputs
+		RpcResponse ListOutputs(const RpcRequest&);
+		RpcResponse GetOutputInfo(const RpcRequest&);
+		RpcResponse StartOutput(const RpcRequest&);
+		RpcResponse StopOutput(const RpcRequest&);
+
+		// Category: Profiles
+		RpcResponse SetCurrentProfile(const RpcRequest&);
+		RpcResponse GetCurrentProfile(const RpcRequest&);
+		RpcResponse ListProfiles(const RpcRequest&);
+
+		// Category: Recording
+		RpcResponse GetRecordingStatus(const RpcRequest&);
+		RpcResponse StartStopRecording(const RpcRequest&);
+		RpcResponse StartRecording(const RpcRequest&);
+		RpcResponse StopRecording(const RpcRequest&);
+		RpcResponse PauseRecording(const RpcRequest&);
+		RpcResponse ResumeRecording(const RpcRequest&);
+		RpcResponse SetRecordingFolder(const RpcRequest&);
+		RpcResponse GetRecordingFolder(const RpcRequest&);
+
+		// Category: Replay Buffer
+		RpcResponse GetReplayBufferStatus(const RpcRequest&);
+		RpcResponse StartStopReplayBuffer(const RpcRequest&);
+		RpcResponse StartReplayBuffer(const RpcRequest&);
+		RpcResponse StopReplayBuffer(const RpcRequest&);
+		RpcResponse SaveReplayBuffer(const RpcRequest&);
+
+		// Category: Scene Collections
+		RpcResponse SetCurrentSceneCollection(const RpcRequest&);
+		RpcResponse GetCurrentSceneCollection(const RpcRequest&);
+		RpcResponse ListSceneCollections(const RpcRequest&);
+
+		// Category: Scene Items
+		RpcResponse GetSceneItemList(const RpcRequest&);
+		RpcResponse GetSceneItemProperties(const RpcRequest&);
+		RpcResponse SetSceneItemProperties(const RpcRequest&);
+		RpcResponse ResetSceneItem(const RpcRequest&);
+		RpcResponse SetSceneItemRender(const RpcRequest&);
+		RpcResponse DeleteSceneItem(const RpcRequest&);
+		RpcResponse AddSceneItem(const RpcRequest&);
+		RpcResponse DuplicateSceneItem(const RpcRequest&);
+
+		// Category: Scenes
+		RpcResponse SetCurrentScene(const RpcRequest&);
+		RpcResponse GetCurrentScene(const RpcRequest&);
+		RpcResponse GetSceneList(const RpcRequest&);
+		RpcResponse CreateScene(const RpcRequest&);
+		RpcResponse ReorderSceneItems(const RpcRequest&);
+		RpcResponse SetSceneTransitionOverride(const RpcRequest&);
+		RpcResponse RemoveSceneTransitionOverride(const RpcRequest&);
+		RpcResponse GetSceneTransitionOverride(const RpcRequest&);
+
+		// Category: Sources
+		RpcResponse CreateSource(const RpcRequest&);
+		RpcResponse GetSourcesList(const RpcRequest&);
+		RpcResponse GetSourceTypesList(const RpcRequest&);
+		RpcResponse GetVolume(const RpcRequest&);
+		RpcResponse SetVolume(const RpcRequest&);
+		RpcResponse GetMute(const RpcRequest&);
+		RpcResponse SetMute(const RpcRequest&);
+		RpcResponse ToggleMute(const RpcRequest&);
+		RpcResponse GetAudioActive(const RpcRequest&);
+		RpcResponse SetSourceName(const RpcRequest&);
+		RpcResponse SetSyncOffset(const RpcRequest&);
+		RpcResponse GetSyncOffset(const RpcRequest&);
+		RpcResponse GetSourceSettings(const RpcRequest&);
+		RpcResponse SetSourceSettings(const RpcRequest&);
+		RpcResponse GetTextGDIPlusProperties(const RpcRequest&);
+		RpcResponse SetTextGDIPlusProperties(const RpcRequest&);
+		RpcResponse GetTextFreetype2Properties(const RpcRequest&);
+		RpcResponse SetTextFreetype2Properties(const RpcRequest&);
+		RpcResponse GetBrowserSourceProperties(const RpcRequest&);
+		RpcResponse SetBrowserSourceProperties(const RpcRequest&);
+		RpcResponse GetSpecialSources(const RpcRequest&);
+		RpcResponse GetSourceFilters(const RpcRequest&);
+		RpcResponse GetSourceFilterInfo(const RpcRequest&);
+		RpcResponse AddFilterToSource(const RpcRequest&);
+		RpcResponse RemoveFilterFromSource(const RpcRequest&);
+		RpcResponse ReorderSourceFilter(const RpcRequest&);
+		RpcResponse MoveSourceFilter(const RpcRequest&);
+		RpcResponse SetSourceFilterSettings(const RpcRequest&);
+		RpcResponse SetSourceFilterVisibility(const RpcRequest&);
+		RpcResponse GetAudioMonitorType(const RpcRequest&);
+		RpcResponse SetAudioMonitorType(const RpcRequest&);
+		RpcResponse GetSourceDefaultSettings(const RpcRequest&);
+		RpcResponse TakeSourceScreenshot(const RpcRequest&);
+
+		// Category: Streaming
+		RpcResponse GetStreamingStatus(const RpcRequest&);
+		RpcResponse StartStopStreaming(const RpcRequest&);
+		RpcResponse StartStreaming(const RpcRequest&);
+		RpcResponse StopStreaming(const RpcRequest&);
+		RpcResponse SetStreamSettings(const RpcRequest&);
+		RpcResponse GetStreamSettings(const RpcRequest&);
+		RpcResponse SaveStreamSettings(const RpcRequest&);
+		RpcResponse SendCaptions(const RpcRequest&);
+
+		// Category: Studio Mode
+		RpcResponse GetStudioModeStatus(const RpcRequest&);
+		RpcResponse GetPreviewScene(const RpcRequest&);
+		RpcResponse SetPreviewScene(const RpcRequest&);
+		RpcResponse TransitionToProgram(const RpcRequest&);
+		RpcResponse EnableStudioMode(const RpcRequest&);
+		RpcResponse DisableStudioMode(const RpcRequest&);
+		RpcResponse ToggleStudioMode(const RpcRequest&);
+
+		// Category: Transitions
+		RpcResponse GetTransitionList(const RpcRequest&);
+		RpcResponse GetCurrentTransition(const RpcRequest&);
+		RpcResponse SetCurrentTransition(const RpcRequest&);
+		RpcResponse SetTransitionDuration(const RpcRequest&);
+		RpcResponse GetTransitionDuration(const RpcRequest&);
+		RpcResponse GetTransitionPosition(const RpcRequest&);
+		RpcResponse GetTransitionSettings(const RpcRequest&);
+		RpcResponse SetTransitionSettings(const RpcRequest&);
+		RpcResponse ReleaseTBar(const RpcRequest&);
+		RpcResponse SetTBarPosition(const RpcRequest&);
 };