diff --git a/@GMS/addons/custom_server/Changelog 6.90.txt b/@GMS/addons/custom_server/Changelog 6.90.txt
index 63a181b..c965eb3 100644
--- a/@GMS/addons/custom_server/Changelog 6.90.txt	
+++ b/@GMS/addons/custom_server/Changelog 6.90.txt	
@@ -1,6 +1,5 @@
-Added new settings to blck_config.sqf and blck_config_mil.sqf
-
-1.  
+1. Added new settings to specify the number of crew per vehhicle to blck_config.sqf and blck_config_mil.sqf
+  
     // global settings for this parameters
     // Determine the number of crew plus driver per vehicle; excess crew are ignored.
     // This can be a value or array of [_min, _max];
@@ -13,8 +12,9 @@ Added new settings to blck_config.sqf and blck_config_mil.sqf
 
     _vehicleCrewCount = 3 //
 
-2.  
-    lists of items to be excluded from dynamically generated loadouts has been moved to:
+2.  Lists of items to be excluded from dynamically generated loadouts has been moved to:
     blck_config.sqf
     blck_config_mil.sqf
-    
\ No newline at end of file
+
+3. Added a new setting that specifies whether logging of blacklisted items is done (handy for debugging)
+    blck_logBlacklistedItems = true;  // set to false to disable logging 
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_isClass.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_isClass.sqf
new file mode 100644
index 0000000..b48bae2
--- /dev/null
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_isClass.sqf
@@ -0,0 +1,11 @@
+/*
+	GMS_fnc_isClass
+
+	Purpose: determine if a string is a valid className
+	Parameters: _item, a string to be interrogated.
+	Returns: true if the string is a valid classname.
+*/
+//#include "GMSCore\init\GMS_defines.hpp" "\addons\GMSCore\init\GMS_defines.hpp"
+params["_item"];
+private _result = if ([_item] call GMS_fnc_getCfgType isEqualTo "") then {false} else {true};
+_result
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionEmplacedRelative.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionEmplacedRelative.sqf
deleted file mode 100644
index be606c9..0000000
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionEmplacedRelative.sqf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
-	By Ghostrider [GRG]
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-
-    params["_center","_emplaced","_garrisonGroup"];
-    private["_obj","_objects"];
-    private _group = call blck_fnc_create_AI_Group;
-    _objects = [];
-    {
-        _x params["_objClassName","_objRelPos","_objDir"];
-        _obj = [_objClassName, [0,0,0],0] call blck_fnc_spawnSingleObject;
-        _objects pushBack _obj;
-        _obj setPosATL (_objRelPos vectorAdd _center);
-        _obj setDir _objDir;
-        private _unit = [_group] call blck_fnc_spawnUnit;
-        _unit moveInGunner _unit;         
-        private _wep addMPEventHandler["MPHit",{[_this] call blck_EH_AIVehicle_HandleDamage}];
-        _wep setVariable["GRG_vehType","emplaced"];	
-        [_wep,false] call blck_fnc_configureMissionVehicle;	        
-    }forEach _emplaced;
-    blck_monitoredVehicles append _emplacedWeps;
-    private _return = [_emplacedWeps,_group,_abort];
-    _return
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLandscapeRelative.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLandscapeRelative.sqf
deleted file mode 100644
index 3b6c620..0000000
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLandscapeRelative.sqf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/*
-	By Ghostrider [GRG]
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-params["_center","_landscape"];
-// diag_log format["fnc_spawnMissionLandscapeRelative: _center = %1",_center];
-private["_obj","_objects"];
-_objects = [];
-{
-    _x params["_objClassName","_objRelPos","_objDir"];
-    _obj = [_objClassName, _objRelPos vectorAdd _center, _objDir,enableSimulationForObject,enableDamageForObject,enableRopesforObject,"CAN_COLLIDE"] call blck_fnc_spawnSingleObject;
-    _objects pushBack _obj;
-}forEach _landscape;
-_objects
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLootBoxesRelative.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLootBoxesRelative.sqf
deleted file mode 100644
index ef75795..0000000
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMissionLootBoxesRelative.sqf
+++ /dev/null
@@ -1,26 +0,0 @@
-
-/*
-	By Ghostrider [GRG]
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-    
-params["_center","_crates"];
-private["_crate","_cratesSpawned"];
-
-_cratesSpawned = [];
-{
-    _x params["_objClassName","_objRelPos","_crateLoot","_lootCounts","_objDir"];
-    _crate = [_objClassName, _objRelPos vectorAdd _center, _objDir] call blck_fnc_spawn_lootCrate;
-    //_crate setPosATL _objRelPos vectorAdd _center;
-    _cratesSpawned pushBack _crate;
-    _crate allowDamage false;
-    _crate enableRopeAttach false;
-    _crate 
-}forEach _crates;
-_cratesSpawned
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnSingleObject.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnSingleObject.sqf
deleted file mode 100644
index 55167b2..0000000
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnSingleObject.sqf
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-	By Ghostrider [GRG]
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-
-params["_objClassName","_objPosn",["_objDir",0],["_enableSimulation",true],["_enableDamage",true],["_enableRopes",true],["_mode","NONE"]];
-private _obj = createVehicle[_objClassName,_objPosn,[],0,_mode];
-_obj setDir _objDir;
-_obj allowDamage _enableDamage;
-_obj enableDynamicSimulation _enableSimulation;
-_obj
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateAllMarkerAliveCounts.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateAllMarkerAliveCounts.sqf
deleted file mode 100644
index 7597e6b..0000000
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateAllMarkerAliveCounts.sqf
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-	by Ghostrider [GRG] 
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-diag_log "_fnc_updateAllMarkerAliveCounts called";
-/*
-{
-	diag_log format["_fnc_updateAllMarkerAliveCounts: _x = %1",_x];
-	[_x select 0, _x select 1, _x select 2] call blck_fnc_updateMarkerAliveCount;
-}forEach blck_missionMarkers;
diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_checkGroupWaypointStatus.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_checkGroupWaypointStatus.sqf
index 5558a79..422d216 100644
--- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_checkGroupWaypointStatus.sqf
+++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_checkGroupWaypointStatus.sqf
@@ -18,6 +18,6 @@ if ((diag_tickTime > (_group getVariable "timeStamp") + _maxTime) || ( (getPos (
 {
 	(leader _group) call blck_fnc_changeToMoveWaypoint;
 	#ifdef blck_debugMode
-	if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: infantry group %1 stuck, waypoint reset",_group];};
+	if (blck_debugLevel > 2) then {diag_log format["_fnc_checkGroupWaypointStatus: infantry group %1 stuck, waypoint reset",_group];};
 	#endif
 };
diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf
deleted file mode 100644
index b6e2e8e..0000000
--- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-	[] call blck_fnc_waypointMonitor;
-	
-	Scans all groups in  for those that have been stuck in a particular waypoint for an excessive time and checks if they are in combat. 
-	If not it directs them to the next waypoint. 
-	It uses a timestamp attached to the group that is cleared upon waypoint completion.
-	
-	By Ghostrider-GRG-
-
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-
-
-
diff --git a/@GMS/addons/custom_server/Compiles/HC/GMS_fnc_HC_getListConnected.sqf b/@GMS/addons/custom_server/Compiles/HC/GMS_fnc_HC_getListConnected.sqf
deleted file mode 100644
index fa0e980..0000000
--- a/@GMS/addons/custom_server/Compiles/HC/GMS_fnc_HC_getListConnected.sqf
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-	Killed handler for _units
-	By Ghostrider-GRG-
-
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-
-//blck_fnc_HC_getListConnected = 
-private _hcs = entities "HeadlessClient_F";
-//diag_log format["_fnc_HC_getListConected: _hcs = %1",_hcs];
-_hcs
-
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf
index d83b3ce..41c819e 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf
@@ -289,7 +289,7 @@ if (blck_useStatic && (_noEmplacedToSpawn > 0)) then
 _vehToSpawn = [_noVehiclePatrols] call blck_fnc_getNumberFromRange;
 if (blck_useVehiclePatrols && ((_vehToSpawn > 0) || count _missionPatrolVehicles > 0)) then
 {
-	_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_missionPatrolVehicles,useRelativePos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms] call blck_fnc_spawnMissionVehiclePatrols;
+	_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_missionPatrolVehicles,useRelativePos,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount] call blck_fnc_spawnMissionVehiclePatrols;
 
 	if (typeName _temp isEqualTo "ARRAY") then
 	{
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_selectVehicleCrewCount.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_selectVehicleCrewCount.sqf
index f44673a..c132b89 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_selectVehicleCrewCount.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_selectVehicleCrewCount.sqf
@@ -1,4 +1,15 @@
+/*
+	by Ghostrider [GRG]
 
+	--------------------------
+	License
+	--------------------------
+	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
+
+	http://creativecommons.org/licenses/by-nc-sa/4.0/	
+*/
+
+#include "\q\addons\custom_server\Configs\blck_defines.hpp";
 params["_diff"];
 private ["_count"];
 switch (toLower(_diff)) do
@@ -8,4 +19,5 @@ switch (toLower(_diff)) do
 	case "green": {_count = blck_vehCrew_green};
 	case "orange": {_count = blck_vehCrew_orange};
 };
+diag_log format["_fnc_selectVehicleCrewCount: _count set to %1",_count];
 _count
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf
index 2e81528..68de71b 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf
@@ -14,7 +14,7 @@
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 // params["_pos",  "_center", ["_numai1",5],  ["_numai2",10],  ["_skillLevel","red"], ["_minDist",20], ["_maxDist",35],["_configureWaypoints",true], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear],["_vests",blck_vests],["_backpacks",blck_backpacks],["_weaponList",[]],["_sideArms",blck_Pistols], ["_scuba",false] ];
-params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false]];
+params["_coords","_noVehiclePatrols","_skillAI","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",[]], ["_headGear",[]],["_vests",[]],["_backpacks",[]],["_weaponList",[]],["_sideArms",[]], ["_isScubaGroup",false],["_crewCount",4]];
 //diag_log format["_fnc_spawnMissionVehiclePatrols: _this = %1",_this];
 if (_uniforms isEqualTo []) 		then {_uniforms = [_skillAI] call blck_fnc_selectAIUniforms};
 if (_headGear  isEqualTo [])		then {_headGear = [_skillAI] call blck_fnc_selectAIHeadgear};
@@ -52,8 +52,9 @@ if (_missionPatrolVehicles isEqualTo []) then
 		_spawnPos = _x select 1;
 	};
 	_vehicle = _x select 0;
+	//private _crewCount = [skillAI] call GMS_fnc_selectVehicleCrewCount;
 	// params["_pos",  "_center", _numai1,  _numai2,  _skillLevel, _minDist, _maxDist, _configureWaypoints, _uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms, _scuba ];
-	_vehGroup = [_spawnPos,_coords,3,3,_skillAI,1,2,false,_uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaGroup] call blck_fnc_spawnGroup;
+	_vehGroup = [_spawnPos,_coords,_crewCount,_crewCount,_skillAI,1,2,false,_uniforms, _headGear,_vests,_backpacks,_weaponList,_sideArms,_isScubaGroup] call blck_fnc_spawnGroup;
 	if (isNull _vehGroup) exitWith 
 	{
 		_abort = true;
diff --git a/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf b/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf
deleted file mode 100644
index ac6fe7f..0000000
--- a/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-	Author: Ghostrider [GRG]
-	Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP
-	License: Attribution-NonCommercial-ShareAlike 4.0 International
-	Last Modified 1/23/17
-*/
-params["_grpPilot"];
-private["_heli","_pilot"];
-_pilot = (units _grpPilot) select 0;
-_heli = vehicle _pilot;
-diag_log "reinforcements deployed:: send heli back to spawn";
-[[_heli], 300 /* 5 min*/] spawn blck_fnc_addObjToQue;
-// select a random location abotu 2K from the mission
-_spawnVector = round(random(360));
-_spawnDistance = 2000;
-_pos = getPos _heli;
-
-// Use the new functionality of getPos
-//  https://community.bistudio.com/wiki/getPos
-_home = _pos getPos [_spawnDistance,_spawnVector];
-
-// Send the heli back to base
-_grpPilot = group this;
-[_grpPilot, 0] setWPPos _pos; 
-[_grpPilot, 0] setWaypointType "MOVE";
-[_grpPilot, 0] setWaypointSpeed "FULL";
-[_grpPilot, 0] setWaypointBehaviour "CARELESS";
-[_grpPilot, 0] setWaypointCompletionRadius 200;
-[_grpPilot, 0] setWaypointStatements ["true", "{deleteVehicle _x} forEach units group this;deleteVehicle (vehicle this);diag_log ""helicopter and crew deleted"""];
-[_grpPilot, 0] setWaypointName "GoHome";
-[_grpPilot,0] setWaypointTimeout [0.5,0.5,0.5];
-
-
-diag_log "reinforcements:: sending Heli Home";
-
-
diff --git a/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf b/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf
deleted file mode 100644
index 8681e55..0000000
--- a/@GMS/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-	Author: Ghostrider [GRG]
-	Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP
-	License: Attribution-NonCommercial-ShareAlike 4.0 International
-	call with
-	[
-		_supplyHeli,		// heli from which they should para
-		_lootCounts,
-		_lootSetting // [blue, red, green, orange]
-	] call blck_spawnHeliParaCrate
-*/
-
-params["_supplyHeli","_lootCounts"];
-
-private ["_chute","_crate","_crateSelected","_dir","_offset"];
-_crate = "";
-_chute = "";
-
-diag_log "_fnc_spawnParaCrate:: spawning crate";
-
-
-_dir = getDir _supplyHeli;
-_dir = if (_dir < 180) then {_dir + 210} else {_dir - 210};
-_offset =  _supplyHeli getPos [10, _dir];
-
-//open parachute and attach to crate
-_chute = createVehicle ["I_Parachute_02_F", [100, 100, 100], [], 0, "FLY"];
-[_chute] call blck_fnc_protectVehicle;
-_chute setPos [_offset select 0, _offset select 1, 100  ];  //(_offset select 2) - 10];
-
-diag_log format["_fnc_spawnParaCrate:: chute spawned yielding object %1 at postion %2", _chute, getPos _chute];
-	
-//create the parachute and crate
-_crateSelected = selectRandom["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_IND_AmmoVeh_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F"];
-_crate = [getPos _chute, _crateSelected] call blck_fnc_spawnCrate;
-//_crate = createVehicle [_crateSelected, position _chute, [], 0, "CAN_COLLIDE"];
-_crate setPos [position _supplyHeli select 0, position _supplyHeli select 1, 250];  //(position _supplyHeli select 2) - 10];	
-_crate attachTo [_chute, [0, 0, -1.3]];
-_crate allowdamage false;
-_crate enableRopeAttach true;  // allow slingloading where possible
-
-diag_log format["_fnc_spawnParaCrate:: crate spawned %1 at position %2 and attached to %3",_crate, getPos _crate, attachedTo _crate];
-
-
-switch (_lootSetting) do
-{
-	case "orange": {[_crate, blck_BoxLoot_Orange, _lootCounts] call blck_fnc_fillBoxes;};
-	case "green": {[_crate, blck_BoxLoot_Green, _lootCounts] call blck_fnc_fillBoxes;};
-	case "red": {[_crate, blck_BoxLoot_Red, _lootCounts] call blck_fnc_fillBoxes;};
-	case "blue": {[_crate, blck_BoxLoot_Blue, _lootCounts] call blck_fnc_fillBoxes;};
-	default {[_crate, blck_BoxLoot_Red, _lootCounts] call blck_fnc_fillBoxes;};
-};
-	
-diag_log format["_fnc_spawnParaCrate:: crate loaded and now at position %1 and attached to %2", getPos _crate, attachedTo _crate];
-
-_fn_monitorCrate = {
-	params["_crate","_chute"];
-	uiSleep 30;
-	private["_crateOnGround"];
-	_crateOnGround = false;
-	while {!_crateOnGround} do
-	{
-		uiSleep 1;  
-		diag_log format["_fnc_spawnParaCrate::  Crate Altitude: %1  Crate Velocity: %2  Crate Position: %3 Crate attachedTo %4", getPos _crate select 2, velocityModelSpace _crate select 2, getPosATL _crate, attachedTo _crate];
-		if ( (((velocity _crate) select 2) < 0.1)  || ((getPosATL _crate select 2) < 0.1) ) exitWith 
-		{
-			uiSleep 10; // give some time for everything to settle
-			detach _crate;
-			deleteVehicle _chute;
-			if (surfaceIsWater (getPos _crate)) then
-			{
-				deleteVehicle _crate;
-			} else
-			{
-				[_crate] call blck_fnc_signalEnd;
-			};
-		};
-	};
-};
-
-[_crate,_chute] call _fn_monitorCrate;
-[[_crate], 1200 /* 20 min*/] spawn blck_fnc_addObjToQue;
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf
index d53cd27..97faeb5 100644
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf
@@ -1,6 +1,5 @@
 /*
 	by Ghostrider
-	7-27-17
 	Alerts the leader of a group of the location of an enemy.
 	 
 	--------------------------
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf
index 37805b8..7880cfa 100644
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf
@@ -14,7 +14,7 @@ params["_target"];
 private["_vehGroup"];
 {
 	_vehGroup = _x getVariable["vehicleGroup",grpNull];
-	if (_target distance2D (leader _vehGroup) < 1000) then {[_vehGroup,_target] call GMS_fnc_alertGroupUnits;};
+	if (_target distance2D (leader _vehGroup) < 1000) then {[_vehGroup,_target] call blck_fnc_alertGroupUnits;};
 }forEach blck_monitoredVehicles;
 
 
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf
deleted file mode 100644
index 6677ea7..0000000
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/*
-	calculate a reward player for AI Kills in crypto.
-	Code fragment adapted from VEMF
-	call as [_unit,_killer] call blck_fnc_rewardKiller;
-	Last modified 6/3/17
-	--------------------------
-	License
-	--------------------------
-	All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
-
-	http://creativecommons.org/licenses/by-nc-sa/4.0/
-*/
-#include "\q\addons\custom_server\Configs\blck_defines.hpp";
-
-params["_unit","_killer"];
-private["_reward","_maxReward","_dist","_killstreakReward","_distanceBonus","_newKillerScore","_newKillerFrags","_money"];
-if (toLower(blck_modType) isEqualTo "epoch") then
-{
-	if ( (vehicle _killer) in blck_forbidenVehicles || (currentWeapon _killer) in blck_forbidenVehicleGuns ) then 
-	{
-		_reward = 0;
-	}
-	else
-	{
-		_maxReward = 50;
-		_dist = _unit distance _killer;
-		_reward = 0;
-		_distanceBonus = floor((_unit distance _killer)/100);
-		_killstreakBonus = 3 * (_killer getVariable["blck_kills",0]);
-		_reward = 25 + _distanceBonus + _killstreakBonus;
-		private _killstreakReward=+(_kills*2);
-		[_killer,_reward + _killstreakReward] call blck_fnc_giveTakeCrypto;
-		if (blck_useKillScoreMessage) then
-		{
-			[["showScore",[_reward,"",_kills],""],[_killer]] call blck_fnc_messageplayers;
-		};
-	};
-};
-
-if (toLower(blck_modType) isEqualTo "exile") then
-{
-	private["_distanceBonus","_overallRespectChange","_newKillerScore","_newKillerFrags","_maxReward","_money","_message"];
-	if ( (isPlayer _killer) && (_killer getVariable["ExileHunger",0] > 0) && (_killer getVariable["ExileThirst",0] > 0) ) then
-	{
-		_distanceBonus = floor((_unit distance _killer)/100);
-		_killstreakBonus = 3 * (_killer getVariable["blck_kills",0]);
-		_respectGained = 25 + _distanceBonus + _killstreakBonus;
-		_score = _killer getVariable ["ExileScore", 0];
-		_score = _score + (_respectGained);
-		_killer setVariable ["ExileScore", _score];
-		format["setAccountScore:%1:%2", _score,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
-		_newKillerFrags = _killer getVariable ["ExileKills", 0];
-		_newKillerFrags = _newKillerFrags + 1;
-		_killer setVariable ["ExileKills", _newKillerFrags];
-		format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
-		_killer call ExileServer_object_player_sendStatsUpdate;
-		if (blck_useKillScoreMessage) then
-		{
-			[["showScore",[_respectGained,_distanceBonus,_kills]], [_killer]] call blck_fnc_messageplayers;
-		};
-	};
-};
diff --git a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf
index c8d4454..ed202b3 100644
--- a/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf
+++ b/@GMS/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf
@@ -16,15 +16,6 @@
 
 private["_vehType","_safepos","_veh","_unitNumber"];
 params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",40],["_maxDis",60],["_group",grpNull],["_setWaypoints",true]];
-#ifdef blck_debugMode
-if (blck_debugLevel > 1) then
-{
-	private _params = ["_center","_pos","_vehType","_minDis","_maxDis","_group","_setWaypoints"];
-	{
-		diag_log format["_fnc_spawnMissionVehiclePatrol:: param %1 | isEqualTo %2 | _forEachIndex %3",_params select _forEachIndex,_this select _forEachIndex, _forEachIndex];
-	}forEach _this;
-};
-#endif
 
 //_center  Center of the mission area - this is usuall the position treated as the center by the mission spawner. Vehicles will patrol the perimeter of the mission area.
 // _pos the approximate spawn point for the vehicle
@@ -33,8 +24,6 @@ if (blck_debugLevel > 1) then
 //_maxDis = maximum distance from the center of the mission for vehicle waypoints
 //_groupForVehiclePatrol = The group with which to man the vehicle
 
-
-
 if !(isNull _group) then {
 	_veh = [_vehType,_pos] call blck_fnc_spawnVehicle;
 //	_veh addEventHandler["HandleDamage",{ [_this] call blck_EH_AIVehicle_HandleDamage}];
@@ -43,12 +32,6 @@ if !(isNull _group) then {
 	_veh setVariable["blck_vehiclePlayerDetectionOdds",blck_vehiclePlayerDetectionOdds];
 	
 	//_group setVariable["groupVehicle",_veh];
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 1) then
-	{
-		diag_log format["spawnVehiclePatrol:: vehicle spawned is %1 of typeof %2",_veh, typeOf _veh];
-	};
-	#endif
 
 	_unitNumber = 0;
 
@@ -60,7 +43,7 @@ if !(isNull _group) then {
 				default {_x moveInCargo _veh;};
 			};
 			_unitNumber = _unitNumber + 1;
-	}forEach (units _group);
+	}forEach (units _group);  //  TODO: add check for empty crew slots and delete excess crew
 
 	// params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_wpPatrolMode","SAD"],["_soldierType","null"] ];
 	_group setcombatmode "RED";
diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf
index fb9b46d..6b0c747 100644
--- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf
+++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf
@@ -39,6 +39,7 @@ private _functions = [
 	["GMS_fnc_msgIED","\q\addons\custom_server\Compiles\Functions\GMS_fnc_msgIED.sqf"],
 	["GMS_fnc_cleanupTemporaryMarkers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_cleanupTemporaryMarkers.sqf"],
 	["GMS_fnc_updateCrateSignals","\q\addons\custom_server\Compiles\Functions\GMS_fnc_updateCrateSignals.sqf"],
+	["GMS_fnc_isClass","\q\addons\custom_server\Compiles\Functions\GMS_fnc_isClass.sqf"],
 
 	// Player-related functions
 	["GMS_fnc_handlePlayerUpdates","\q\addons\custom_server\Compiles\Units\GMS_fnc_handlePlayerUpdates.sqf"],
@@ -89,7 +90,7 @@ private _functions = [
 	// Group-related functions
 	["blck_fnc_spawnGroup","\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"],					// Spawn a single group and populate it with AI units]
 	["blck_fnc_setupWaypoints","\q\addons\custom_server\Compiles\Groups\GMS_fnc_setupWaypoints.sqf"],			// Set default waypoints for a group
-	["blck_fnc_missionGroupMonitor","\q\addons\custom_server\Compiles\Groups\GMS_fnc_missionGroupMonitor.sqf"], // Monitors active groups for those that are stuck in an SAD waypoint but not in combat
+	//["blck_fnc_missionGroupMonitor","\q\addons\custom_server\Compiles\Groups\GMS_fnc_missionGroupMonitor.sqf"], // Monitors active groups for those that are stuck in an SAD waypoint but not in combat
 	["blck_fnc_changeToSADWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSADWaypoint.sqf"],
 	["blck_fnc_changeToMoveWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToMoveWaypoint.sqf"],
 	["blck_fnc_changeToSentryWaypoint","\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSentryWaypoint.sqf"],
@@ -150,8 +151,7 @@ private _functions = [
 	["blck_fnc_spawnParaUnits","\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnParaUnits.sqf"],
 	["blck_fnc_nextAnim","\q\addons\custom_server\Compiles\Units\GMS_fnc_nextAnim.sqf"],
 	["blck_fnc_placeCharacterInBuilding","\q\addons\custom_server\Compiles\Units\GMS_fnc_placeCharacterInBuilding.sqf"],
-	["GMS_fnc_removeAllAIgear","\q\addons\custom_server\Compiles\Units\GMS_fnc_removeAllAIgear.sqf"],
-	["GMS_fnc_alertGroupUnits","\q\addons\custom_server\Compiles\Functions\GMS_fnc_alertGroupUnits.sqf"],	
+	["GMS_fnc_removeAllAIgear","\q\addons\custom_server\Compiles\Units\GMS_fnc_removeAllAIgear.sqf"],	
 
 	// HC support functions
 	["blck_fnc_HC_XferGroup","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf"],
diff --git a/@GMS/addons/custom_server/Configs/blck_configs.sqf b/@GMS/addons/custom_server/Configs/blck_configs.sqf
index cccd2cb..b82890a 100644
--- a/@GMS/addons/custom_server/Configs/blck_configs.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_configs.sqf
@@ -18,7 +18,7 @@
 	*/
 	blck_locationBlackList = [];  // Do not touch ...
 	blck_debugON = true;  //  Do not touch ... 
-	blck_debugLevel = 0;  //  Do not touch ... 
+	blck_debugLevel = 3;  //  Do not touch ... 
 	#ifdef blck_milServer
 	if (true) exitWith 
 	{
@@ -292,29 +292,35 @@
 	****************************************************************/
 	// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
 	blck_useConfigsGeneratedLoadouts = true;
+	blck_logBlacklistedItems = true;
+	//blck_maximumitempriceinai_loadouts = 1000;
 	// lists of black-listed items to be excluded from dynamic loadouts
 		blck_blacklistedVests = [
-
+			"V_Press_F"
 		];
 
 		blck_blacklistedUniforms = [
-
+			"U_I_Protagonist_VR",
+			"U_C_Protagonist_VR",			
+			"U_O_Protagonist_VR",
+			"U_B_Protagonist_VR"
 		];
 
 		blck_blacklistedBackpacks = [
-
+			"B_ViperLightHarness_blk_F"
 		];
 
 		blck_blacklistedHeadgear = [
-
+			"H_HelmotO_ViperSP_ghex_F",
+			"H_HelmetO_VierSP_hex"
 		];
 
 		blck_blacklistedPrimaryWeapons = [
-
+			"srifle_LRR_tna_F"
 		];
 
 		blck_blacklistedSecondaryWeapons = [
-
+			"hgun_Pistol_heav_02_F"
 		];
 
 		blck_blacklistedLaunchersAndSwingWeapons = [
@@ -322,7 +328,7 @@
 		];
 
 		blck_blacklistedOptics = [
-
+			"optic_tws"
 		];
 
 		blck_blacklistedAttachments = [
@@ -419,12 +425,20 @@
 		diag_log format["[blckeagls] Loading Mission System using Parameters for %1",blck_modType];
 		execVM "\q\addons\custom_server\Configs\blck_configs_exile.sqf";
 	};	
-	waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
-	waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
+	uiSleep 10;
+	//waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
+	//diag_log format["blck_maximumItemPriceInAI_Loadouts defined as %1",blck_maximumItemPriceInAI_Loadouts];
+	//waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
 	if (blck_useConfigsGeneratedLoadouts) then
 	{
 		diag_log format["[blckeagls] Dynamic Configs Enabled"];
 		execVM "\q\addons\custom_server\Configs\blck_dynamicConfigs.sqf";
+	} else {
+		if (blck_verifyClassNames) then 
+		{
+
+		};
 	};
 
 	blck_configsLoaded = true;
+	diag_log format["<--- blck_configs loaded at %1 --->",diag_tickTime];
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf b/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf
index 7ba3b50..6c95da3 100644
--- a/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_configs_epoch.sqf
@@ -11,6 +11,7 @@
 */
 
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
+#include "\q\addons\custom_server\init\build.sqf";
 diag_log format["[blckeagls] loading configurations for Epoch for blckeagls build %1",blck_buildNumber];
 ////////////
 // Epoch-specific settings
diff --git a/@GMS/addons/custom_server/Configs/blck_configs_epoch_mil.sqf b/@GMS/addons/custom_server/Configs/blck_configs_epoch_mil.sqf
index ee24ee4..2c58634 100644
--- a/@GMS/addons/custom_server/Configs/blck_configs_epoch_mil.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_configs_epoch_mil.sqf
@@ -46,6 +46,8 @@ AI WEAPONS, UNIFORMS, VESTS AND GEAR
 	blck_crateMoneyGreen = [300, 500];
 	blck_crateMoneyOrange = [500, 750];
 	
+	blck_maximumItemPriceInAI_Loadouts = 100;
+
 	blck_allowSalesAtBlackMktTraders = true; // Allow vehicles to be sold at Halvjes black market traders.
 	
 	_blck_lightlyArmed_ARMA3 = [
diff --git a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf
index 47b52d0..4b6f5c2 100644
--- a/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_configs_mil.sqf
@@ -276,6 +276,8 @@
 	****************************************************************/
 	// When true, AI loadouts will be set from the class names in CfgPricing rather than the settings in the mod-specific configuration files
 	blck_useConfigsGeneratedLoadouts = true;
+	blck_logblacklisteditems = true;
+	//blck_maximumitempriceinai_loadouts = 1000;
 	// lists of black-listed items to be excluded from dynamic loadouts
 		blck_blacklistedVests = [
 
@@ -404,8 +406,9 @@
 		diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",blck_modType];
 		execVM "\q\addons\custom_server\Configs\blck_configs_exile_mil.sqf";
 	};	
-	waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
-	waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
+	//waitUntil{!isNil "blck_useConfigsGeneratedLoadouts"};
+	//waitUntil {!isNil "blck_maximumItemPriceInAI_Loadouts"};
+	uiSleep 10;
 	if (blck_useConfigsGeneratedLoadouts) then
 	{
 		diag_log format["[blckeagls] Dynamic Configs Enabled"];
diff --git a/@GMS/addons/custom_server/Configs/blck_custom_config.sqf b/@GMS/addons/custom_server/Configs/blck_custom_config.sqf
index 1d9f854..b52ab78 100644
--- a/@GMS/addons/custom_server/Configs/blck_custom_config.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_custom_config.sqf
@@ -152,7 +152,7 @@ if (blck_debugON || (blck_debugLevel > 0)) then // These variables are found in
 	blck_enableGreenMissions = -1;
 	blck_enableRedMissions = -1;
 	blck_enableBlueMissions = 1;
-	blck_numberUnderwaterDynamicMissions = 3;	
+	blck_numberUnderwaterDynamicMissions = 1;	
 	blck_enableHunterMissions = -1;
 	blck_enableScoutsMissions = -1;
 	blck_maxCrashSites = -3; 
diff --git a/@GMS/addons/custom_server/Configs/blck_defines.hpp b/@GMS/addons/custom_server/Configs/blck_defines.hpp
index c5e03e9..418422f 100644
--- a/@GMS/addons/custom_server/Configs/blck_defines.hpp
+++ b/@GMS/addons/custom_server/Configs/blck_defines.hpp
@@ -13,7 +13,7 @@
 
 #define useAPEX 
 #define blck_milServer
-#define blck_useCUP
+//#define blck_useCUP
 //#define blck_useRHS
 
 ////////////////////////////
diff --git a/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf b/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf
index d813e0a..43ea0fc 100644
--- a/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_dynamicConfigs.sqf
@@ -65,6 +65,7 @@ if (toLower(blck_modType) isEqualTo "exile") then
 };
 //diag_log format["_fnc_dynamicConfigsConfigurator: count _classnameList = %1",count _classnameList];
 {
+
 	private _temp = [_x] call bis_fnc_itemType;
 	//diag_log _temp;
 	_itemCategory = _temp select 0;
@@ -80,51 +81,51 @@ if (toLower(blck_modType) isEqualTo "exile") then
 	};
 	if (_price < blck_maximumItemPriceInAI_Loadouts) then
 	{
-	if (_itemCategory isEqualTo "Weapon") then
-	{
-		switch (_itemType) do
+		if (_itemCategory isEqualTo "Weapon") then
 		{
-			case "AssaultRifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnAR pushBack _x}};
-			case "MachineGun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnLMG pushBack _x}};
-			case "SubmachineGun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnSMG pushBack _x}};
-			case "Shotgun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnShotGun pushBack _x}};
-			case "Rifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnAR pushBack _x}};
-			case "SniperRifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnSniper pushBack _x}};
-			case "Handgun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnHandGun pushBack _x}};
-			case "Launcher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}};
-			case "RocketLauncher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}};
-			case "Throw": {if !(_x in blck_blacklistedItems) then {_wpnThrow pushBack _x}};
+			switch (_itemType) do
+			{
+				case "AssaultRifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnAR pushBack _x} else {if (blck_logBlacklistedItems) then {diag_log format["Assualt Rifle %1 Excluded: blacklisted Item",_x]}}};
+				case "MachineGun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnLMG pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Machine Gun %1 Excluded: blacklisted Item",_x]}}};
+				case "SubmachineGun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnSMG pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Submachinegun %1 Excluded: blacklisted Item",_x]}}};
+				case "Shotgun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnShotGun pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Shotgun %1 Excluded: blacklisted Item",_x]}}};
+				case "Rifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnAR pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Rifle %1 Excluded: blacklisted Item",_x]}}};
+				case "SniperRifle": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnSniper pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Sniper Rifle %1 Excluded: blacklisted Item",_x]}}};
+				case "Handgun": {if !(_x in blck_blacklistedSecondaryWeapons) then {_wpnHandGun pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Handgun %1 Excluded: blacklisted Item",_x]}}};
+				case "Launcher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Launcher %1 Excluded: blacklisted Item",_x]}}};
+				case "RocketLauncher": {if !(_x in blck_blacklistedLaunchersAndSwingWeapons) then {_wpnLauncher pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Rocket Launcer %1 Excluded: blacklisted Item",_x]}}};
+				case "Throw": {if !(_x in blck_blacklistedItems) then {_wpnThrow pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Throw %1 Excluded: blacklisted Item",_x]}}};
+			};
 		};
-	};
-	
-	if (_itemCategory isEqualTo "Item") then
-	{
-		switch (_itemType) do
+		
+		if (_itemCategory isEqualTo "Item") then
 		{
-			case "AccessoryMuzzle": {if !(_x in blck_blacklistedAttachments) then {_wpnMuzzles pushBack _x}};
-			case "AccessoryPointer": {if !(_x in blck_blacklistedAttachments) then {_wpnPointers pushBack _x}};
-			case "AccessorySights": {if !(_x in blck_blacklistedOptics) then {_wpnOptics pushBack _x}};
-			case "AccessoryBipod": {if !(_x in blck_blacklistedAttachments) then {_wpnUnderbarrel pushBack _x}};
-			case "Binocular": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
-			case "Compass": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
-			case "GPS": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}};
-			case "NVGoggles": {if !(_x in blck_blacklistedItems) then {_NVG pushBack _x}};		
+			switch (_itemType) do
+			{
+				case "AccessoryMuzzle": {if !(_x in blck_blacklistedAttachments) then {_wpnMuzzles pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Muzzle %1 Excluded: blacklisted Item",_x]}}};
+				case "AccessoryPointer": {if !(_x in blck_blacklistedAttachments) then {_wpnPointers pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Pointer %1 Excluded: blacklisted Item",_x]}}};
+				case "AccessorySights": {if !(_x in blck_blacklistedOptics) then {_wpnOptics pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Optic %1 Excluded: blacklisted Item",_x]}}};
+				case "AccessoryBipod": {if !(_x in blck_blacklistedAttachments) then {_wpnUnderbarrel pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Bipod %1 Excluded: blacklisted Item",_x]}}};
+				case "Binocular": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Binocular/Rangefinder/Binocular %1 Excluded: blacklisted Item",_x]}}};
+				case "Compass": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Compass %1 Excluded: blacklisted Item",_x]}}};
+				case "GPS": {if !(_x in blck_blacklistedItems) then {_misc pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["GPS %1 Excluded: blacklisted Item",_x]}}};
+				case "NVGoggles": {if !(_x in blck_blacklistedItems) then {_NVG pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["NVG %1 Excluded: blacklisted Item",_x]}}};		
+			};
 		};
-	};
-	
-	
-	if (_itemCategory isEqualTo "Equipment") then
-	{
-		switch (_itemType) do
+		
+		
+		if (_itemCategory isEqualTo "Equipment") then
 		{
-			case "Glasses": {if !(_x in blck_blacklistedItems) then {_glasses pushBack _x}};
-			case "Headgear": {if !(_x in blck_blacklistedHeadgear) then {_headgear pushBack _x}};
-			case "Vest": {if !(_x in blck_blacklistedVests) then {_vests pushBack _x}};
-			case "Uniform": {if !(_x in blck_blacklistedUniforms) then {_uniforms pushBack _x}};
-			case "Backpack": {if !(_x in blck_blacklistedBackpacks) then {_backpacks pushBack _x}};
+			switch (_itemType) do
+			{
+				case "Glasses": {if !(_x in blck_blacklistedItems) then {_glasses pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Glasses %1 Excluded: blacklisted Item",_x]}}};
+				case "Headgear": {if !(_x in blck_blacklistedHeadgear) then {_headgear pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Headgear %1 Excluded: blacklisted Item",_x]}}};
+				case "Vest": {if !(_x in blck_blacklistedVests) then {_vests pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Vest %1 Excluded: blacklisted Item",_x]}}};
+				case "Uniform": {if !(_x in blck_blacklistedUniforms) then {_uniforms pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Uniform %1 Excluded: blacklisted Item",_x]}}};
+				case "Backpack": {if !(_x in blck_blacklistedBackpacks) then {_backpacks pushBack _x}else {if (blck_logBlacklistedItems) then {diag_log format["Backpack %1 Excluded: blacklisted Item",_x]}}};
+			};
 		};
 	};
-	};
 } forEach _classnameList;
 
 blck_primaryWeapons = _wpnAR + _wpnLMG + _wpnSMG + _wpnShotGun + _wpnSniper;
diff --git a/@GMS/addons/custom_server/Missions/Static/GMS_StaticMissions_Lists.sqf b/@GMS/addons/custom_server/Missions/Static/GMS_StaticMissions_Lists.sqf
index 267856d..7ba591f 100644
--- a/@GMS/addons/custom_server/Missions/Static/GMS_StaticMissions_Lists.sqf
+++ b/@GMS/addons/custom_server/Missions/Static/GMS_StaticMissions_Lists.sqf
@@ -16,10 +16,10 @@ private ["_staticMissions"];
 _staticMissions = [
 	// [mod (Epoch, Exile), map (Altis, Tanoa etc), mission center, eg [10445,2014,0], filename.sqf (name of static mission template for that mission)];
 	//["Epoch","Altis","template.sqf"],
-	["Epoch","Altis","staticMissionExample2_Epoch.sqf"],
+	//["Epoch","Altis","staticMissionExample2_Epoch.sqf"],
 	//["Epoch","Altis","destroyer.sqf"],
 	//["Exile","Altis","template.sqf"],	
-	["Exile","Altis","staticMissionExample2_Exile.sqf"]
+	//["Exile","Altis","staticMissionExample2_Exile.sqf"]
 ];
 
 diag_log "[blckeagls] GMS_StaticMissions_Lists.sqf <Loaded>";
diff --git a/@GMS/addons/custom_server/Missions/UMS/code/GMS_fnc_spawnDynamicUMSMission.sqf b/@GMS/addons/custom_server/Missions/UMS/code/GMS_fnc_spawnDynamicUMSMission.sqf
index dea9cf6..e452748 100644
--- a/@GMS/addons/custom_server/Missions/UMS/code/GMS_fnc_spawnDynamicUMSMission.sqf
+++ b/@GMS/addons/custom_server/Missions/UMS/code/GMS_fnc_spawnDynamicUMSMission.sqf
@@ -51,6 +51,7 @@ if (isNil "_chanceLoot") 		then {_chanceLoot = 0};
 if (isNil "_paraTriggerDistance") then {_paraTriggerDistance = 400;};
 if (isNil "_paraLoot") 			then {_paraLoot = blck_BoxLoot_Blue};
 if (isNil "_paraLootCounts") 	then {_paraLootCounts = blck_lootCountsRed};
+if (isNil "_vehicleCrewCount") then {_vehicleCrewCount = [_aiDifficultyLevel] call GMS_fnc_selectVehicleCrewCount};
 
 _objects = [];
 _mines = [];
@@ -259,7 +260,7 @@ _vehToSpawn = 0;
 if (blck_useVehiclePatrols &&  count _vehiclePatrolParameters > 0) then
 {
 	// params["_coords","_noVehiclePatrols","_aiDifficultyLevel","_missionPatrolVehicles",["_useRelativePos",true],["_uniforms",blck_SkinList], ["_headGear",blck_headgear],["_vests",blck_vests],["_backpacks",blck_backpacks],["_weaponList",[]],["_sideArms",blck_Pistols], ["_isScubaGroup",false]];
-	_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_vehiclePatrolParameters,true,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false /*,blck_UMS_weapons,blck_UMS_vests,isScubaMission*/ ] call blck_fnc_spawnMissionVehiclePatrols;
+	_temp = [_coords,_vehToSpawn,_aiDifficultyLevel,_vehiclePatrolParameters,true,_uniforms,_headGear,_vests,_backpacks,_weaponList,_sideArms,false,_vehicleCrewCount /*,blck_UMS_weapons,blck_UMS_vests,isScubaMission*/ ] call blck_fnc_spawnMissionVehiclePatrols;
 	#ifdef blck_debugMode
 	if  (blck_debugLevel > 1) then {
 			diag_log format["dynamicUMSspawner :: (251) blck_fnc_spawnMissionVehiclePatrols returned _temp = %1",_temp]; 
diff --git a/@GMS/addons/custom_server/Missions/privateVars.sqf b/@GMS/addons/custom_server/Missions/privateVars.sqf
index 809d007..13c9e03 100644
--- a/@GMS/addons/custom_server/Missions/privateVars.sqf
+++ b/@GMS/addons/custom_server/Missions/privateVars.sqf
@@ -4,4 +4,4 @@ private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_marke
 	"_uniforms","_headgear","_weaponList","_sideArms","_vests","_backpacks","_chancePara","_noPara","_chanceHeliPatrol","_noChoppers","_missionHelis",
 	"__noChoppers","_endCondition","_chanceHeliLootDropped","_chanceLoot","_paraTriggerDistance","_paraLootCounts","_paraLoot","_markerColor","_loadCratesTiming",
 	"_markerType","_useMines","_assetKilledMsg","_enemyLeaderConfig","_hostageConfig","_garrisonedBuildings_BuildingPosnSystem","_garrisonedBuilding_ATLsystem",
-	"_submarinePatrolParameters","_scubaGroupParameters"];
\ No newline at end of file
+	"_submarinePatrolParameters","_scubaGroupParameters","_vehicleCrewCount"];
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/TODO b/@GMS/addons/custom_server/TODO
index 3a6e6e7..b32e2e2 100644
--- a/@GMS/addons/custom_server/TODO
+++ b/@GMS/addons/custom_server/TODO
@@ -1,16 +1,16 @@
 For V 6.90:
-  1. Sort out the issue with the handling of unit kills not separating killer from the killer's vehicle.
+  1. Sort out the issue with the handling of unit kills not separating killer from the killer's vehicle.  DONE
   2. Test new unlock fix on HC
   3. Write a claim vehicle function.
   4. End of development most likely.
   5. be sure AI do heal when wounded but not killed.
   6. test that ai toss smoke when healing
-  7. Set up queue for markers needing to be deleted.
+  7. Set up queue for markers needing to be deleted.  DONE
     need to call something that quickly scans for markers that need to be deleted
-    need to push temp markers to the cue with delete times.
+    need to push temp markers to the cue with delete times.  DONE
   8. add a quick thing for refreshing flares on crates to replace all those uisleeps
-    do this in _signalEnd and _crateMarker
-    replace _crateMarker with calls to signalEnd.
+    do this in _signalEnd and _crateMarker  DONE
+    replace _crateMarker with calls to signalEnd.  DONE
   9. Check that trader zones are detected properly in Exile.
 Todo:
-  ☐ Item
+  ☐ Item: add check for empty crew slots and delete excess crew