diff --git a/Core/Controllers/ClientLogController.cs b/Core/Controllers/ClientLogController.cs
new file mode 100644
index 00000000..3dcab6af
--- /dev/null
+++ b/Core/Controllers/ClientLogController.cs
@@ -0,0 +1,15 @@
+using Core.Models.Spt.Logging;
+
+namespace Core.Controllers;
+
+public class ClientLogController
+{
+ ///
+ /// Handle /singleplayer/log
+ ///
+ ///
+ public void ClientLog(ClientLogRequest logRequest)
+ {
+ throw new NotImplementedException();
+ }
+}
\ No newline at end of file
diff --git a/Core/Controllers/CustomizationController.cs b/Core/Controllers/CustomizationController.cs
new file mode 100644
index 00000000..f8e7307b
--- /dev/null
+++ b/Core/Controllers/CustomizationController.cs
@@ -0,0 +1,141 @@
+using Core.Models.Eft.Common;
+using Core.Models.Eft.Common.Tables;
+using Core.Models.Eft.Hideout;
+using Core.Models.Eft.Profile;
+
+namespace Core.Controllers;
+
+public class CustomizationController
+{
+ ///
+ /// Get purchasable clothing items from trader that match players side (usec/bear)
+ ///
+ /// trader to look up clothing for
+ /// Session id
+ /// Suit array
+ public Suit GetTraderSuits(string traderId, string sessionId)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Handle CustomizationBuy event
+ /// Purchase/unlock a clothing item from a trader
+ ///
+ /// Player profile
+ /// Request object
+ /// Session id
+ /// ItemEventRouterResponse
+ public ItemEventRouterResponse BuyClothing(
+ PmcData pmcData,
+ BuyClothingRequest buyClothingRequest,
+ string sessionId)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Update output object and player profile with purchase details
+ ///
+ /// Session id
+ /// Player profile
+ /// Clothing purchased
+ /// Client response
+ private void PayForClothingItems(
+ string sessionId,
+ PmcData pmcData,
+ List itemsToPayForClothingWith,
+ ItemEventRouterResponse output)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Update output object and player profile with purchase details for single piece of clothing
+ ///
+ /// Session id
+ /// Player profile
+ /// Payment details
+ /// Client response
+ private void PayForClothingItem(
+ string sessionId,
+ PmcData pmcData,
+ PaymentItemForClothing paymentItemDetails,
+ ItemEventRouterResponse output)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private List GetAllTraderSuits(string sessionId)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Handle client/hideout/customization/offer/list
+ ///
+ ///
+ ///
+ ///
+ public HideoutCustomisationStorage GetHideoutCustomisation(
+ string sessionId,
+ EmptyRequestData info)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Handle client/customization/storage
+ ///
+ ///
+ ///
+ ///
+ public List GetCustomisationStorage(
+ string sessionId,
+ EmptyRequestData info)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private string GetGameEdition(SptProfile profile)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Handle CustomizationSet event
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ItemEventRouterResponse SetClothing(
+ string sessionId,
+ CustomizationSetRequest request,
+ PmcData pmcData)
+ {
+ throw new NotImplementedException();
+ }
+
+ ///
+ /// Applies a purchased suit to the players doll
+ ///
+ /// Suit to apply to profile
+ /// Profile to update
+ private void ApplyClothingItemToProfile(
+ CustomizationSetOption customization,
+ PmcData pmcData)
+ {
+ throw new NotImplementedException();
+ }
+}
\ No newline at end of file