diff --git a/TypeScript/10ScopesAndTypes/types/controllers/LocationController.d.ts b/TypeScript/10ScopesAndTypes/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/10ScopesAndTypes/types/controllers/LocationController.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/10ScopesAndTypes/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/10ScopesAndTypes/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/10ScopesAndTypes/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/10ScopesAndTypes/types/helpers/InRaidHelper.d.ts b/TypeScript/10ScopesAndTypes/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/10ScopesAndTypes/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/10ScopesAndTypes/types/helpers/ItemHelper.d.ts b/TypeScript/10ScopesAndTypes/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/10ScopesAndTypes/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocation.d.ts b/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocationBase.d.ts b/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/10ScopesAndTypes/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/10ScopesAndTypes/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/10ScopesAndTypes/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/10ScopesAndTypes/types/models/spt/config/IItemConfig.d.ts b/TypeScript/10ScopesAndTypes/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/10ScopesAndTypes/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/10ScopesAndTypes/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/10ScopesAndTypes/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/10ScopesAndTypes/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/10ScopesAndTypes/types/models/spt/server/ILocations.d.ts b/TypeScript/10ScopesAndTypes/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/10ScopesAndTypes/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/10ScopesAndTypes/types/services/ItemFilterService.d.ts b/TypeScript/10ScopesAndTypes/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/10ScopesAndTypes/types/services/ItemFilterService.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/10ScopesAndTypes/types/utils/Watermark.d.ts b/TypeScript/10ScopesAndTypes/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/10ScopesAndTypes/types/utils/Watermark.d.ts
+++ b/TypeScript/10ScopesAndTypes/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/11BundleLoadingSample/types/controllers/LocationController.d.ts b/TypeScript/11BundleLoadingSample/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/11BundleLoadingSample/types/controllers/LocationController.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/11BundleLoadingSample/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/11BundleLoadingSample/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/11BundleLoadingSample/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/11BundleLoadingSample/types/helpers/InRaidHelper.d.ts b/TypeScript/11BundleLoadingSample/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/11BundleLoadingSample/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/11BundleLoadingSample/types/helpers/ItemHelper.d.ts b/TypeScript/11BundleLoadingSample/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/11BundleLoadingSample/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocation.d.ts b/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocationBase.d.ts b/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/11BundleLoadingSample/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/11BundleLoadingSample/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/11BundleLoadingSample/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/11BundleLoadingSample/types/models/spt/config/IItemConfig.d.ts b/TypeScript/11BundleLoadingSample/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/11BundleLoadingSample/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/11BundleLoadingSample/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/11BundleLoadingSample/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/11BundleLoadingSample/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/11BundleLoadingSample/types/models/spt/server/ILocations.d.ts b/TypeScript/11BundleLoadingSample/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/11BundleLoadingSample/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/11BundleLoadingSample/types/services/ItemFilterService.d.ts b/TypeScript/11BundleLoadingSample/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/11BundleLoadingSample/types/services/ItemFilterService.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/11BundleLoadingSample/types/utils/Watermark.d.ts b/TypeScript/11BundleLoadingSample/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/11BundleLoadingSample/types/utils/Watermark.d.ts
+++ b/TypeScript/11BundleLoadingSample/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/12ClassExtensionOverride/types/controllers/LocationController.d.ts b/TypeScript/12ClassExtensionOverride/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/12ClassExtensionOverride/types/controllers/LocationController.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/12ClassExtensionOverride/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/12ClassExtensionOverride/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/12ClassExtensionOverride/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/12ClassExtensionOverride/types/helpers/InRaidHelper.d.ts b/TypeScript/12ClassExtensionOverride/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/12ClassExtensionOverride/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/12ClassExtensionOverride/types/helpers/ItemHelper.d.ts b/TypeScript/12ClassExtensionOverride/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/12ClassExtensionOverride/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocation.d.ts b/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocationBase.d.ts b/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/12ClassExtensionOverride/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/12ClassExtensionOverride/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/12ClassExtensionOverride/types/models/spt/config/IItemConfig.d.ts b/TypeScript/12ClassExtensionOverride/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/12ClassExtensionOverride/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/12ClassExtensionOverride/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/12ClassExtensionOverride/types/models/spt/server/ILocations.d.ts b/TypeScript/12ClassExtensionOverride/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/12ClassExtensionOverride/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/12ClassExtensionOverride/types/services/ItemFilterService.d.ts b/TypeScript/12ClassExtensionOverride/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/12ClassExtensionOverride/types/services/ItemFilterService.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/12ClassExtensionOverride/types/utils/Watermark.d.ts b/TypeScript/12ClassExtensionOverride/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/12ClassExtensionOverride/types/utils/Watermark.d.ts
+++ b/TypeScript/12ClassExtensionOverride/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/13AddTrader/types/controllers/LocationController.d.ts b/TypeScript/13AddTrader/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/13AddTrader/types/controllers/LocationController.d.ts
+++ b/TypeScript/13AddTrader/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/13AddTrader/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/13AddTrader/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/13AddTrader/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/13AddTrader/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/13AddTrader/types/helpers/InRaidHelper.d.ts b/TypeScript/13AddTrader/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/13AddTrader/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/13AddTrader/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/13AddTrader/types/helpers/ItemHelper.d.ts b/TypeScript/13AddTrader/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/13AddTrader/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/13AddTrader/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/13AddTrader/types/models/eft/common/ILocation.d.ts b/TypeScript/13AddTrader/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/13AddTrader/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/13AddTrader/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/13AddTrader/types/models/eft/common/ILocationBase.d.ts b/TypeScript/13AddTrader/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/13AddTrader/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/13AddTrader/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/13AddTrader/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/13AddTrader/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/13AddTrader/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/13AddTrader/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/13AddTrader/types/models/spt/config/IItemConfig.d.ts b/TypeScript/13AddTrader/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/13AddTrader/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/13AddTrader/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/13AddTrader/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/13AddTrader/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/13AddTrader/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/13AddTrader/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/13AddTrader/types/models/spt/server/ILocations.d.ts b/TypeScript/13AddTrader/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/13AddTrader/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/13AddTrader/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/13AddTrader/types/services/ItemFilterService.d.ts b/TypeScript/13AddTrader/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/13AddTrader/types/services/ItemFilterService.d.ts
+++ b/TypeScript/13AddTrader/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/13AddTrader/types/utils/Watermark.d.ts b/TypeScript/13AddTrader/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/13AddTrader/types/utils/Watermark.d.ts
+++ b/TypeScript/13AddTrader/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts b/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/14AfterDBLoadHook/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/14AfterDBLoadHook/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/14AfterDBLoadHook/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts b/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IItemConfig.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/14AfterDBLoadHook/types/services/ItemFilterService.d.ts b/TypeScript/14AfterDBLoadHook/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/14AfterDBLoadHook/types/services/ItemFilterService.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts b/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts
+++ b/TypeScript/14AfterDBLoadHook/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/15HttpListenerExample/types/controllers/LocationController.d.ts b/TypeScript/15HttpListenerExample/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/15HttpListenerExample/types/controllers/LocationController.d.ts
+++ b/TypeScript/15HttpListenerExample/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/15HttpListenerExample/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/15HttpListenerExample/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/15HttpListenerExample/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/15HttpListenerExample/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/15HttpListenerExample/types/helpers/InRaidHelper.d.ts b/TypeScript/15HttpListenerExample/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/15HttpListenerExample/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/15HttpListenerExample/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/15HttpListenerExample/types/helpers/ItemHelper.d.ts b/TypeScript/15HttpListenerExample/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/15HttpListenerExample/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/15HttpListenerExample/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/15HttpListenerExample/types/models/eft/common/ILocation.d.ts b/TypeScript/15HttpListenerExample/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/15HttpListenerExample/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/15HttpListenerExample/types/models/eft/common/ILocationBase.d.ts b/TypeScript/15HttpListenerExample/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/15HttpListenerExample/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/15HttpListenerExample/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/15HttpListenerExample/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/15HttpListenerExample/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/15HttpListenerExample/types/models/spt/config/IItemConfig.d.ts b/TypeScript/15HttpListenerExample/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/15HttpListenerExample/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/15HttpListenerExample/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/15HttpListenerExample/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/15HttpListenerExample/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/15HttpListenerExample/types/models/spt/server/ILocations.d.ts b/TypeScript/15HttpListenerExample/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/15HttpListenerExample/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/15HttpListenerExample/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/15HttpListenerExample/types/services/ItemFilterService.d.ts b/TypeScript/15HttpListenerExample/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/15HttpListenerExample/types/services/ItemFilterService.d.ts
+++ b/TypeScript/15HttpListenerExample/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/15HttpListenerExample/types/utils/Watermark.d.ts b/TypeScript/15HttpListenerExample/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/15HttpListenerExample/types/utils/Watermark.d.ts
+++ b/TypeScript/15HttpListenerExample/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts b/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts
+++ b/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/16ImporterUtil/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/16ImporterUtil/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/16ImporterUtil/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts b/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts
+++ b/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts b/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts
+++ b/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts
+++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/18CustomItemService/types/controllers/LocationController.d.ts b/TypeScript/18CustomItemService/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/18CustomItemService/types/controllers/LocationController.d.ts
+++ b/TypeScript/18CustomItemService/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/18CustomItemService/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/18CustomItemService/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/18CustomItemService/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/18CustomItemService/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/18CustomItemService/types/helpers/InRaidHelper.d.ts b/TypeScript/18CustomItemService/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/18CustomItemService/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/18CustomItemService/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/18CustomItemService/types/helpers/ItemHelper.d.ts b/TypeScript/18CustomItemService/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/18CustomItemService/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/18CustomItemService/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/18CustomItemService/types/models/eft/common/ILocation.d.ts b/TypeScript/18CustomItemService/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/18CustomItemService/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/18CustomItemService/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/18CustomItemService/types/models/eft/common/ILocationBase.d.ts b/TypeScript/18CustomItemService/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/18CustomItemService/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/18CustomItemService/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/18CustomItemService/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/18CustomItemService/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/18CustomItemService/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/18CustomItemService/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/18CustomItemService/types/models/spt/config/IItemConfig.d.ts b/TypeScript/18CustomItemService/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/18CustomItemService/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/18CustomItemService/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/18CustomItemService/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/18CustomItemService/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/18CustomItemService/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/18CustomItemService/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/18CustomItemService/types/models/spt/server/ILocations.d.ts b/TypeScript/18CustomItemService/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/18CustomItemService/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/18CustomItemService/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/18CustomItemService/types/services/ItemFilterService.d.ts b/TypeScript/18CustomItemService/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/18CustomItemService/types/services/ItemFilterService.d.ts
+++ b/TypeScript/18CustomItemService/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/18CustomItemService/types/utils/Watermark.d.ts b/TypeScript/18CustomItemService/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/18CustomItemService/types/utils/Watermark.d.ts
+++ b/TypeScript/18CustomItemService/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/19UseExternalLibraries/types/controllers/LocationController.d.ts b/TypeScript/19UseExternalLibraries/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/19UseExternalLibraries/types/controllers/LocationController.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/19UseExternalLibraries/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/19UseExternalLibraries/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/19UseExternalLibraries/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/19UseExternalLibraries/types/helpers/InRaidHelper.d.ts b/TypeScript/19UseExternalLibraries/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/19UseExternalLibraries/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/19UseExternalLibraries/types/helpers/ItemHelper.d.ts b/TypeScript/19UseExternalLibraries/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/19UseExternalLibraries/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocation.d.ts b/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocationBase.d.ts b/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/19UseExternalLibraries/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/19UseExternalLibraries/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/19UseExternalLibraries/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/19UseExternalLibraries/types/models/spt/config/IItemConfig.d.ts b/TypeScript/19UseExternalLibraries/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/19UseExternalLibraries/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/19UseExternalLibraries/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/19UseExternalLibraries/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/19UseExternalLibraries/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/19UseExternalLibraries/types/models/spt/server/ILocations.d.ts b/TypeScript/19UseExternalLibraries/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/19UseExternalLibraries/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/19UseExternalLibraries/types/services/ItemFilterService.d.ts b/TypeScript/19UseExternalLibraries/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/19UseExternalLibraries/types/services/ItemFilterService.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/19UseExternalLibraries/types/utils/Watermark.d.ts b/TypeScript/19UseExternalLibraries/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/19UseExternalLibraries/types/utils/Watermark.d.ts
+++ b/TypeScript/19UseExternalLibraries/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/1LogToConsole/types/controllers/LocationController.d.ts b/TypeScript/1LogToConsole/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/1LogToConsole/types/controllers/LocationController.d.ts
+++ b/TypeScript/1LogToConsole/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/1LogToConsole/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/1LogToConsole/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/1LogToConsole/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/1LogToConsole/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/1LogToConsole/types/helpers/InRaidHelper.d.ts b/TypeScript/1LogToConsole/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/1LogToConsole/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/1LogToConsole/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/1LogToConsole/types/helpers/ItemHelper.d.ts b/TypeScript/1LogToConsole/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/1LogToConsole/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/1LogToConsole/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/1LogToConsole/types/models/eft/common/ILocation.d.ts b/TypeScript/1LogToConsole/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/1LogToConsole/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/1LogToConsole/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/1LogToConsole/types/models/eft/common/ILocationBase.d.ts b/TypeScript/1LogToConsole/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/1LogToConsole/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/1LogToConsole/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/1LogToConsole/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/1LogToConsole/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/1LogToConsole/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/1LogToConsole/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/1LogToConsole/types/models/spt/config/IItemConfig.d.ts b/TypeScript/1LogToConsole/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/1LogToConsole/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/1LogToConsole/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/1LogToConsole/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/1LogToConsole/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/1LogToConsole/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/1LogToConsole/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/1LogToConsole/types/models/spt/server/ILocations.d.ts b/TypeScript/1LogToConsole/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/1LogToConsole/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/1LogToConsole/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/1LogToConsole/types/services/ItemFilterService.d.ts b/TypeScript/1LogToConsole/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/1LogToConsole/types/services/ItemFilterService.d.ts
+++ b/TypeScript/1LogToConsole/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/1LogToConsole/types/utils/Watermark.d.ts b/TypeScript/1LogToConsole/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/1LogToConsole/types/utils/Watermark.d.ts
+++ b/TypeScript/1LogToConsole/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/20CustomChatBot/types/controllers/LocationController.d.ts b/TypeScript/20CustomChatBot/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/20CustomChatBot/types/controllers/LocationController.d.ts
+++ b/TypeScript/20CustomChatBot/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/20CustomChatBot/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/20CustomChatBot/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/20CustomChatBot/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/20CustomChatBot/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/20CustomChatBot/types/helpers/InRaidHelper.d.ts b/TypeScript/20CustomChatBot/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/20CustomChatBot/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/20CustomChatBot/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/20CustomChatBot/types/helpers/ItemHelper.d.ts b/TypeScript/20CustomChatBot/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/20CustomChatBot/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/20CustomChatBot/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/20CustomChatBot/types/models/eft/common/ILocation.d.ts b/TypeScript/20CustomChatBot/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/20CustomChatBot/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/20CustomChatBot/types/models/eft/common/ILocationBase.d.ts b/TypeScript/20CustomChatBot/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/20CustomChatBot/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/20CustomChatBot/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/20CustomChatBot/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/20CustomChatBot/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/20CustomChatBot/types/models/spt/config/IItemConfig.d.ts b/TypeScript/20CustomChatBot/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/20CustomChatBot/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/20CustomChatBot/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/20CustomChatBot/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/20CustomChatBot/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/20CustomChatBot/types/models/spt/server/ILocations.d.ts b/TypeScript/20CustomChatBot/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/20CustomChatBot/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/20CustomChatBot/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/20CustomChatBot/types/services/ItemFilterService.d.ts b/TypeScript/20CustomChatBot/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/20CustomChatBot/types/services/ItemFilterService.d.ts
+++ b/TypeScript/20CustomChatBot/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/20CustomChatBot/types/utils/Watermark.d.ts b/TypeScript/20CustomChatBot/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/20CustomChatBot/types/utils/Watermark.d.ts
+++ b/TypeScript/20CustomChatBot/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/21CustomCommandoCommand/types/controllers/LocationController.d.ts b/TypeScript/21CustomCommandoCommand/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/21CustomCommandoCommand/types/controllers/LocationController.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/21CustomCommandoCommand/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/21CustomCommandoCommand/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/21CustomCommandoCommand/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/21CustomCommandoCommand/types/helpers/InRaidHelper.d.ts b/TypeScript/21CustomCommandoCommand/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/21CustomCommandoCommand/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/21CustomCommandoCommand/types/helpers/ItemHelper.d.ts b/TypeScript/21CustomCommandoCommand/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/21CustomCommandoCommand/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocation.d.ts b/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocationBase.d.ts b/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/21CustomCommandoCommand/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/21CustomCommandoCommand/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/21CustomCommandoCommand/types/models/spt/config/IItemConfig.d.ts b/TypeScript/21CustomCommandoCommand/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/21CustomCommandoCommand/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/21CustomCommandoCommand/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/21CustomCommandoCommand/types/models/spt/server/ILocations.d.ts b/TypeScript/21CustomCommandoCommand/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/21CustomCommandoCommand/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/21CustomCommandoCommand/types/services/ItemFilterService.d.ts b/TypeScript/21CustomCommandoCommand/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/21CustomCommandoCommand/types/services/ItemFilterService.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/21CustomCommandoCommand/types/utils/Watermark.d.ts b/TypeScript/21CustomCommandoCommand/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/21CustomCommandoCommand/types/utils/Watermark.d.ts
+++ b/TypeScript/21CustomCommandoCommand/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/22CustomAkiCommand/types/controllers/LocationController.d.ts b/TypeScript/22CustomAkiCommand/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/22CustomAkiCommand/types/controllers/LocationController.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/22CustomAkiCommand/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/22CustomAkiCommand/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/22CustomAkiCommand/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/22CustomAkiCommand/types/helpers/InRaidHelper.d.ts b/TypeScript/22CustomAkiCommand/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/22CustomAkiCommand/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/22CustomAkiCommand/types/helpers/ItemHelper.d.ts b/TypeScript/22CustomAkiCommand/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/22CustomAkiCommand/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocation.d.ts b/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocationBase.d.ts b/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/22CustomAkiCommand/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/22CustomAkiCommand/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/22CustomAkiCommand/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/22CustomAkiCommand/types/models/spt/config/IItemConfig.d.ts b/TypeScript/22CustomAkiCommand/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/22CustomAkiCommand/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/22CustomAkiCommand/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/22CustomAkiCommand/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/22CustomAkiCommand/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/22CustomAkiCommand/types/models/spt/server/ILocations.d.ts b/TypeScript/22CustomAkiCommand/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/22CustomAkiCommand/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/22CustomAkiCommand/types/services/ItemFilterService.d.ts b/TypeScript/22CustomAkiCommand/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/22CustomAkiCommand/types/services/ItemFilterService.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/22CustomAkiCommand/types/utils/Watermark.d.ts b/TypeScript/22CustomAkiCommand/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/22CustomAkiCommand/types/utils/Watermark.d.ts
+++ b/TypeScript/22CustomAkiCommand/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/2EditDatabase/types/controllers/LocationController.d.ts b/TypeScript/2EditDatabase/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/2EditDatabase/types/controllers/LocationController.d.ts
+++ b/TypeScript/2EditDatabase/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/2EditDatabase/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/2EditDatabase/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/2EditDatabase/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/2EditDatabase/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/2EditDatabase/types/helpers/InRaidHelper.d.ts b/TypeScript/2EditDatabase/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/2EditDatabase/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/2EditDatabase/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/2EditDatabase/types/helpers/ItemHelper.d.ts b/TypeScript/2EditDatabase/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/2EditDatabase/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/2EditDatabase/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/2EditDatabase/types/models/eft/common/ILocation.d.ts b/TypeScript/2EditDatabase/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/2EditDatabase/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/2EditDatabase/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/2EditDatabase/types/models/eft/common/ILocationBase.d.ts b/TypeScript/2EditDatabase/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/2EditDatabase/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/2EditDatabase/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/2EditDatabase/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/2EditDatabase/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/2EditDatabase/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/2EditDatabase/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/2EditDatabase/types/models/spt/config/IItemConfig.d.ts b/TypeScript/2EditDatabase/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/2EditDatabase/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/2EditDatabase/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/2EditDatabase/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/2EditDatabase/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/2EditDatabase/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/2EditDatabase/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/2EditDatabase/types/models/spt/server/ILocations.d.ts b/TypeScript/2EditDatabase/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/2EditDatabase/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/2EditDatabase/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/2EditDatabase/types/services/ItemFilterService.d.ts b/TypeScript/2EditDatabase/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/2EditDatabase/types/services/ItemFilterService.d.ts
+++ b/TypeScript/2EditDatabase/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/2EditDatabase/types/utils/Watermark.d.ts b/TypeScript/2EditDatabase/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/2EditDatabase/types/utils/Watermark.d.ts
+++ b/TypeScript/2EditDatabase/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/3GetSptConfigFile/types/controllers/LocationController.d.ts b/TypeScript/3GetSptConfigFile/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/3GetSptConfigFile/types/controllers/LocationController.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/3GetSptConfigFile/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/3GetSptConfigFile/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/3GetSptConfigFile/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/3GetSptConfigFile/types/helpers/InRaidHelper.d.ts b/TypeScript/3GetSptConfigFile/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/3GetSptConfigFile/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/3GetSptConfigFile/types/helpers/ItemHelper.d.ts b/TypeScript/3GetSptConfigFile/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/3GetSptConfigFile/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocation.d.ts b/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocationBase.d.ts b/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/3GetSptConfigFile/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/3GetSptConfigFile/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/3GetSptConfigFile/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/3GetSptConfigFile/types/models/spt/config/IItemConfig.d.ts b/TypeScript/3GetSptConfigFile/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/3GetSptConfigFile/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/3GetSptConfigFile/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/3GetSptConfigFile/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/3GetSptConfigFile/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/3GetSptConfigFile/types/models/spt/server/ILocations.d.ts b/TypeScript/3GetSptConfigFile/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/3GetSptConfigFile/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/3GetSptConfigFile/types/services/ItemFilterService.d.ts b/TypeScript/3GetSptConfigFile/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/3GetSptConfigFile/types/services/ItemFilterService.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/3GetSptConfigFile/types/utils/Watermark.d.ts b/TypeScript/3GetSptConfigFile/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/3GetSptConfigFile/types/utils/Watermark.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/controllers/LocationController.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/controllers/LocationController.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/InRaidHelper.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/ItemHelper.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocation.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocationBase.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/config/IItemConfig.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/server/ILocations.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/services/ItemFilterService.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/services/ItemFilterService.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/utils/Watermark.d.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/utils/Watermark.d.ts
+++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/4UseACustomConfigFile/types/controllers/LocationController.d.ts b/TypeScript/4UseACustomConfigFile/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/4UseACustomConfigFile/types/controllers/LocationController.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/4UseACustomConfigFile/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/4UseACustomConfigFile/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/4UseACustomConfigFile/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/4UseACustomConfigFile/types/helpers/InRaidHelper.d.ts b/TypeScript/4UseACustomConfigFile/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/4UseACustomConfigFile/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/4UseACustomConfigFile/types/helpers/ItemHelper.d.ts b/TypeScript/4UseACustomConfigFile/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/4UseACustomConfigFile/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocation.d.ts b/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocationBase.d.ts b/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/4UseACustomConfigFile/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/4UseACustomConfigFile/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/4UseACustomConfigFile/types/models/spt/config/IItemConfig.d.ts b/TypeScript/4UseACustomConfigFile/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/4UseACustomConfigFile/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/4UseACustomConfigFile/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/4UseACustomConfigFile/types/models/spt/server/ILocations.d.ts b/TypeScript/4UseACustomConfigFile/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/4UseACustomConfigFile/types/services/ItemFilterService.d.ts b/TypeScript/4UseACustomConfigFile/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/4UseACustomConfigFile/types/services/ItemFilterService.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/4UseACustomConfigFile/types/utils/Watermark.d.ts b/TypeScript/4UseACustomConfigFile/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/4UseACustomConfigFile/types/utils/Watermark.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/5ReplaceMethod/types/controllers/LocationController.d.ts b/TypeScript/5ReplaceMethod/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/5ReplaceMethod/types/controllers/LocationController.d.ts
+++ b/TypeScript/5ReplaceMethod/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/5ReplaceMethod/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/5ReplaceMethod/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/5ReplaceMethod/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/5ReplaceMethod/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/5ReplaceMethod/types/helpers/InRaidHelper.d.ts b/TypeScript/5ReplaceMethod/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/5ReplaceMethod/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/5ReplaceMethod/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/5ReplaceMethod/types/helpers/ItemHelper.d.ts b/TypeScript/5ReplaceMethod/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/5ReplaceMethod/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/5ReplaceMethod/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/5ReplaceMethod/types/models/eft/common/ILocation.d.ts b/TypeScript/5ReplaceMethod/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/5ReplaceMethod/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/5ReplaceMethod/types/models/eft/common/ILocationBase.d.ts b/TypeScript/5ReplaceMethod/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/5ReplaceMethod/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/5ReplaceMethod/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/5ReplaceMethod/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/5ReplaceMethod/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/5ReplaceMethod/types/models/spt/config/IItemConfig.d.ts b/TypeScript/5ReplaceMethod/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/5ReplaceMethod/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/5ReplaceMethod/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/5ReplaceMethod/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/5ReplaceMethod/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/5ReplaceMethod/types/models/spt/server/ILocations.d.ts b/TypeScript/5ReplaceMethod/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/5ReplaceMethod/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/5ReplaceMethod/types/services/ItemFilterService.d.ts b/TypeScript/5ReplaceMethod/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/5ReplaceMethod/types/services/ItemFilterService.d.ts
+++ b/TypeScript/5ReplaceMethod/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/5ReplaceMethod/types/utils/Watermark.d.ts b/TypeScript/5ReplaceMethod/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/5ReplaceMethod/types/utils/Watermark.d.ts
+++ b/TypeScript/5ReplaceMethod/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/6ReferenceAnotherClass/types/controllers/LocationController.d.ts b/TypeScript/6ReferenceAnotherClass/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/6ReferenceAnotherClass/types/controllers/LocationController.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/6ReferenceAnotherClass/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/6ReferenceAnotherClass/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/6ReferenceAnotherClass/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/6ReferenceAnotherClass/types/helpers/InRaidHelper.d.ts b/TypeScript/6ReferenceAnotherClass/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/6ReferenceAnotherClass/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/6ReferenceAnotherClass/types/helpers/ItemHelper.d.ts b/TypeScript/6ReferenceAnotherClass/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/6ReferenceAnotherClass/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocation.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocationBase.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IItemConfig.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/spt/server/ILocations.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/6ReferenceAnotherClass/types/services/ItemFilterService.d.ts b/TypeScript/6ReferenceAnotherClass/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/6ReferenceAnotherClass/types/services/ItemFilterService.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/6ReferenceAnotherClass/types/utils/Watermark.d.ts b/TypeScript/6ReferenceAnotherClass/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/6ReferenceAnotherClass/types/utils/Watermark.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/7OnLoadHook/types/controllers/LocationController.d.ts b/TypeScript/7OnLoadHook/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/7OnLoadHook/types/controllers/LocationController.d.ts
+++ b/TypeScript/7OnLoadHook/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/7OnLoadHook/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/7OnLoadHook/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/7OnLoadHook/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/7OnLoadHook/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/7OnLoadHook/types/helpers/InRaidHelper.d.ts b/TypeScript/7OnLoadHook/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/7OnLoadHook/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/7OnLoadHook/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/7OnLoadHook/types/helpers/ItemHelper.d.ts b/TypeScript/7OnLoadHook/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/7OnLoadHook/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/7OnLoadHook/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/7OnLoadHook/types/models/eft/common/ILocation.d.ts b/TypeScript/7OnLoadHook/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/7OnLoadHook/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/7OnLoadHook/types/models/eft/common/ILocationBase.d.ts b/TypeScript/7OnLoadHook/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/7OnLoadHook/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/7OnLoadHook/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/7OnLoadHook/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/7OnLoadHook/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/7OnLoadHook/types/models/spt/config/IItemConfig.d.ts b/TypeScript/7OnLoadHook/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/7OnLoadHook/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/7OnLoadHook/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/7OnLoadHook/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/7OnLoadHook/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/7OnLoadHook/types/models/spt/server/ILocations.d.ts b/TypeScript/7OnLoadHook/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/7OnLoadHook/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/7OnLoadHook/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/7OnLoadHook/types/services/ItemFilterService.d.ts b/TypeScript/7OnLoadHook/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/7OnLoadHook/types/services/ItemFilterService.d.ts
+++ b/TypeScript/7OnLoadHook/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/7OnLoadHook/types/utils/Watermark.d.ts b/TypeScript/7OnLoadHook/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/7OnLoadHook/types/utils/Watermark.d.ts
+++ b/TypeScript/7OnLoadHook/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/8OnUpdateHook/types/controllers/LocationController.d.ts b/TypeScript/8OnUpdateHook/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/8OnUpdateHook/types/controllers/LocationController.d.ts
+++ b/TypeScript/8OnUpdateHook/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/8OnUpdateHook/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/8OnUpdateHook/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/8OnUpdateHook/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/8OnUpdateHook/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/8OnUpdateHook/types/helpers/InRaidHelper.d.ts b/TypeScript/8OnUpdateHook/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/8OnUpdateHook/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/8OnUpdateHook/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/8OnUpdateHook/types/helpers/ItemHelper.d.ts b/TypeScript/8OnUpdateHook/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/8OnUpdateHook/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/8OnUpdateHook/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/8OnUpdateHook/types/models/eft/common/ILocation.d.ts b/TypeScript/8OnUpdateHook/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/8OnUpdateHook/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/8OnUpdateHook/types/models/eft/common/ILocationBase.d.ts b/TypeScript/8OnUpdateHook/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/8OnUpdateHook/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/8OnUpdateHook/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/8OnUpdateHook/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/8OnUpdateHook/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/8OnUpdateHook/types/models/spt/config/IItemConfig.d.ts b/TypeScript/8OnUpdateHook/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/8OnUpdateHook/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/8OnUpdateHook/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/8OnUpdateHook/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/8OnUpdateHook/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/8OnUpdateHook/types/models/spt/server/ILocations.d.ts b/TypeScript/8OnUpdateHook/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/8OnUpdateHook/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/8OnUpdateHook/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/8OnUpdateHook/types/services/ItemFilterService.d.ts b/TypeScript/8OnUpdateHook/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/8OnUpdateHook/types/services/ItemFilterService.d.ts
+++ b/TypeScript/8OnUpdateHook/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/8OnUpdateHook/types/utils/Watermark.d.ts b/TypeScript/8OnUpdateHook/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/8OnUpdateHook/types/utils/Watermark.d.ts
+++ b/TypeScript/8OnUpdateHook/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }
diff --git a/TypeScript/9RouterHooks/types/controllers/LocationController.d.ts b/TypeScript/9RouterHooks/types/controllers/LocationController.d.ts
index eef31cb..5595baf 100644
--- a/TypeScript/9RouterHooks/types/controllers/LocationController.d.ts
+++ b/TypeScript/9RouterHooks/types/controllers/LocationController.d.ts
@@ -13,6 +13,7 @@ import { LootRequest } from "@spt-aki/models/spt/services/LootRequest";
 import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
 import { ConfigServer } from "@spt-aki/servers/ConfigServer";
 import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
+import { ItemFilterService } from "@spt-aki/services/ItemFilterService";
 import { LocalisationService } from "@spt-aki/services/LocalisationService";
 import { RaidTimeAdjustmentService } from "@spt-aki/services/RaidTimeAdjustmentService";
 import { HashUtil } from "@spt-aki/utils/HashUtil";
@@ -28,6 +29,7 @@ export declare class LocationController {
     protected locationGenerator: LocationGenerator;
     protected localisationService: LocalisationService;
     protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
+    protected itemFilterService: ItemFilterService;
     protected lootGenerator: LootGenerator;
     protected databaseServer: DatabaseServer;
     protected timeUtil: TimeUtil;
@@ -35,7 +37,7 @@ export declare class LocationController {
     protected applicationContext: ApplicationContext;
     protected airdropConfig: IAirdropConfig;
     protected locationConfig: ILocationConfig;
-    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
+    constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext);
     /**
      * Handle client/location/getLocalloot
      * Get a location (map) with generated loot data
diff --git a/TypeScript/9RouterHooks/types/generators/RepeatableQuestGenerator.d.ts b/TypeScript/9RouterHooks/types/generators/RepeatableQuestGenerator.d.ts
index d191571..d020fac 100644
--- a/TypeScript/9RouterHooks/types/generators/RepeatableQuestGenerator.d.ts
+++ b/TypeScript/9RouterHooks/types/generators/RepeatableQuestGenerator.d.ts
@@ -105,7 +105,7 @@ export declare class RepeatableQuestGenerator {
     /**
      * Filter a maps exits to just those for the desired side
      * @param locationKey Map id (e.g. factory4_day)
-     * @param playerSide Scav/Bear
+     * @param playerSide Scav/Pmc
      * @returns Array of Exit objects
      */
     protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[];
diff --git a/TypeScript/9RouterHooks/types/helpers/InRaidHelper.d.ts b/TypeScript/9RouterHooks/types/helpers/InRaidHelper.d.ts
index 8d74906..a72c598 100644
--- a/TypeScript/9RouterHooks/types/helpers/InRaidHelper.d.ts
+++ b/TypeScript/9RouterHooks/types/helpers/InRaidHelper.d.ts
@@ -3,7 +3,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
 import { PaymentHelper } from "@spt-aki/helpers/PaymentHelper";
 import { QuestHelper } from "@spt-aki/helpers/QuestHelper";
 import { IPmcData, IPostRaidPmcData } from "@spt-aki/models/eft/common/IPmcData";
-import { IQuestStatus, TraderInfo, Victim } from "@spt-aki/models/eft/common/tables/IBotBase";
+import { IQuestStatus, TraderInfo } from "@spt-aki/models/eft/common/tables/IBotBase";
 import { Item } from "@spt-aki/models/eft/common/tables/IItem";
 import { ISaveProgressRequestData } from "@spt-aki/models/eft/inRaid/ISaveProgressRequestData";
 import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
@@ -47,20 +47,6 @@ export declare class InRaidHelper {
      * @param items Items array to check
      */
     addUpdToMoneyFromRaid(items: Item[]): void;
-    /**
-     * Add karma changes up and return the new value
-     * @param existingFenceStanding Current fence standing level
-     * @param victims Array of kills player performed
-     * @returns adjusted karma level after kills are taken into account
-     */
-    calculateFenceStandingChangeFromKillsAsScav(existingFenceStanding: number, victims: Victim[]): number;
-    protected getAdditionalLossForKill(fenceStanding: number, repChangeForKill: number): number;
-    /**
-     * Get the standing gain/loss for killing an npc
-     * @param victim Who was killed by player
-     * @returns a numerical standing gain or loss
-     */
-    protected getFenceStandingChangeForKillAsScav(victim: Victim): number;
     /**
      * Reset a profile to a baseline, used post-raid
      * Reset points earned during session property
diff --git a/TypeScript/9RouterHooks/types/helpers/ItemHelper.d.ts b/TypeScript/9RouterHooks/types/helpers/ItemHelper.d.ts
index 2fd1646..3e91ef7 100644
--- a/TypeScript/9RouterHooks/types/helpers/ItemHelper.d.ts
+++ b/TypeScript/9RouterHooks/types/helpers/ItemHelper.d.ts
@@ -59,6 +59,12 @@ export declare class ItemHelper {
      * @returns Does item have the possibility ot need soft inserts
      */
     armorItemCanHoldMods(itemTpl: string): boolean;
+    /**
+     * Does the provided item tpl need soft/removable inserts to function
+     * @param itemTpl Armor item
+     * @returns True if item needs some kind of insert
+     */
+    armorItemHasRemovableOrSoftInsertSlots(itemTpl: string): boolean;
     /**
      * Does the pased in tpl have ability to hold removable plate items
      * @param itemTpl item tpl to check for plate support
diff --git a/TypeScript/9RouterHooks/types/models/eft/common/ILocation.d.ts b/TypeScript/9RouterHooks/types/models/eft/common/ILocation.d.ts
index bba2db0..1fa0a2b 100644
--- a/TypeScript/9RouterHooks/types/models/eft/common/ILocation.d.ts
+++ b/TypeScript/9RouterHooks/types/models/eft/common/ILocation.d.ts
@@ -1,9 +1,10 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
+import { Exit, ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
 import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
 export interface ILocation {
     base: ILocationBase;
     looseLoot: ILooseLoot;
     statics: IStaticContainer;
+    allExtracts: Exit[];
 }
 export interface IStaticContainer {
     containersGroups: Record<string, IContainerMinMax>;
diff --git a/TypeScript/9RouterHooks/types/models/eft/common/ILocationBase.d.ts b/TypeScript/9RouterHooks/types/models/eft/common/ILocationBase.d.ts
index f5ade9e..99f5c9c 100644
--- a/TypeScript/9RouterHooks/types/models/eft/common/ILocationBase.d.ts
+++ b/TypeScript/9RouterHooks/types/models/eft/common/ILocationBase.d.ts
@@ -205,6 +205,7 @@ export interface Exit {
     PassageRequirement: string;
     PlayersCount: number;
     RequirementTip: string;
+    Side?: string;
 }
 export interface MaxItemCountInLocation {
     TemplateId: string;
diff --git a/TypeScript/9RouterHooks/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/9RouterHooks/types/models/eft/common/tables/IBotBase.d.ts
index dcc2a2f..cfcc831 100644
--- a/TypeScript/9RouterHooks/types/models/eft/common/tables/IBotBase.d.ts
+++ b/TypeScript/9RouterHooks/types/models/eft/common/tables/IBotBase.d.ts
@@ -182,6 +182,7 @@ export interface IEftStats {
     LastPlayerState?: LastPlayerState;
     TotalInGameTime: number;
     SurvivorClass?: string;
+    sptLastRaidFenceRepChange?: number;
 }
 export interface IDroppedItem {
     QuestId: string;
diff --git a/TypeScript/9RouterHooks/types/models/spt/config/IItemConfig.d.ts b/TypeScript/9RouterHooks/types/models/spt/config/IItemConfig.d.ts
index e939c09..40daa68 100644
--- a/TypeScript/9RouterHooks/types/models/spt/config/IItemConfig.d.ts
+++ b/TypeScript/9RouterHooks/types/models/spt/config/IItemConfig.d.ts
@@ -3,6 +3,8 @@ export interface IItemConfig extends IBaseConfig {
     kind: "aki-item";
     /** Items that should be globally blacklisted */
     blacklist: string[];
+    /** items that should not be given as rewards */
+    rewardItemBlacklist: string[];
     /** Items that can only be found on bosses */
     bossItems: string[];
     handbookPriceOverride: Record<string, number>;
diff --git a/TypeScript/9RouterHooks/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/9RouterHooks/types/models/spt/logging/LogTextColor.d.ts
index 6c7abf3..aefca2a 100644
--- a/TypeScript/9RouterHooks/types/models/spt/logging/LogTextColor.d.ts
+++ b/TypeScript/9RouterHooks/types/models/spt/logging/LogTextColor.d.ts
@@ -7,5 +7,5 @@ export declare enum LogTextColor {
     MAGENTA = "magenta",
     CYAN = "cyan",
     WHITE = "white",
-    GRAY = ""
+    GRAY = "gray"
 }
diff --git a/TypeScript/9RouterHooks/types/models/spt/server/ILocations.d.ts b/TypeScript/9RouterHooks/types/models/spt/server/ILocations.d.ts
index c739973..a52242f 100644
--- a/TypeScript/9RouterHooks/types/models/spt/server/ILocations.d.ts
+++ b/TypeScript/9RouterHooks/types/models/spt/server/ILocations.d.ts
@@ -1,28 +1,23 @@
-import { ILocationBase } from "@spt-aki/models/eft/common/ILocationBase";
-import { ILooseLoot } from "@spt-aki/models/eft/common/ILooseLoot";
+import { ILocation } from "@spt-aki/models/eft/common/ILocation";
 import { ILocationsBase } from "@spt-aki/models/eft/common/tables/ILocationsBase";
 export interface ILocations {
-    bigmap?: ILocationData;
-    develop?: ILocationData;
-    factory4_day?: ILocationData;
-    factory4_night?: ILocationData;
-    hideout?: ILocationData;
-    interchange?: ILocationData;
-    laboratory?: ILocationData;
-    lighthouse?: ILocationData;
-    privatearea?: ILocationData;
-    rezervbase?: ILocationData;
-    shoreline?: ILocationData;
-    suburbs?: ILocationData;
-    tarkovstreets?: ILocationData;
-    terminal?: ILocationData;
-    town?: ILocationData;
-    woods?: ILocationData;
-    sandbox?: ILocationData;
+    bigmap?: ILocation;
+    develop?: ILocation;
+    factory4_day?: ILocation;
+    factory4_night?: ILocation;
+    hideout?: ILocation;
+    interchange?: ILocation;
+    laboratory?: ILocation;
+    lighthouse?: ILocation;
+    privatearea?: ILocation;
+    rezervbase?: ILocation;
+    shoreline?: ILocation;
+    suburbs?: ILocation;
+    tarkovstreets?: ILocation;
+    terminal?: ILocation;
+    town?: ILocation;
+    woods?: ILocation;
+    sandbox?: ILocation;
     /** Holds a mapping of the linkages between locations on the UI */
     base?: ILocationsBase;
 }
-export interface ILocationData {
-    base: ILocationBase;
-    looseLoot?: ILooseLoot;
-}
diff --git a/TypeScript/9RouterHooks/types/services/ItemFilterService.d.ts b/TypeScript/9RouterHooks/types/services/ItemFilterService.d.ts
index 791bb34..dea17d7 100644
--- a/TypeScript/9RouterHooks/types/services/ItemFilterService.d.ts
+++ b/TypeScript/9RouterHooks/types/services/ItemFilterService.d.ts
@@ -15,6 +15,17 @@ export declare class ItemFilterService {
      * @returns true if blacklisted
      */
     isItemBlacklisted(tpl: string): boolean;
+    /**
+     * Check if item is blacklisted from being a reward for player
+     * @param tpl item tpl to check is on blacklist
+     * @returns True when blacklisted
+     */
+    isItemRewardBlacklisted(tpl: string): boolean;
+    /**
+     * Get an array of items that should never be given as a reward to player
+     * @returns string array of item tpls
+     */
+    getItemRewardBlacklist(): string[];
     /**
      * Return every template id blacklisted in config/item.json
      * @returns string array of blacklisted tempalte ids
diff --git a/TypeScript/9RouterHooks/types/utils/Watermark.d.ts b/TypeScript/9RouterHooks/types/utils/Watermark.d.ts
index de35684..eb24706 100644
--- a/TypeScript/9RouterHooks/types/utils/Watermark.d.ts
+++ b/TypeScript/9RouterHooks/types/utils/Watermark.d.ts
@@ -40,6 +40,4 @@ export declare class Watermark {
     protected resetCursor(): void;
     /** Draw the watermark */
     protected draw(): void;
-    /** Caculate text length */
-    protected textLength(s: string): number;
 }