diff --git a/@GMS/addons/custom_server/.vscode/ipch/6d9c138c9efd720f/mmap_address.bin b/@GMS/addons/custom_server/.vscode/ipch/6d9c138c9efd720f/mmap_address.bin
new file mode 100644
index 0000000..862b842
Binary files /dev/null and b/@GMS/addons/custom_server/.vscode/ipch/6d9c138c9efd720f/mmap_address.bin differ
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf
index 983cb58..68d3536 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf
@@ -12,18 +12,8 @@
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
-#ifdef blck_debugMode
-if (blck_debugLevel > 2) then
-{
-	diag_log format ["_fnc_cleanEmptyGroups:: -- >> group count = %1 ",(count allGroups)];
-	diag_log format ["_fnc_cleanEmptyGroups:: -- >> Group count AI side = %1", call blck_fnc_groupsOnAISide];
-};
-#endif
-
 private _grp = +allGroups;
 {
-	//diag_log format["_fnc_cleanEmptyGroups:: - >> type of object _x = %1",typeName _x];
 	if ((count units _x) isEqualTo 0) then {deleteGroup _x};
 }forEach _grp;
-if (blck_debugLevel > 2) then {diag_log "_fnc_cleanEmptyGroups::  -- >> exiting function";};
 
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf
new file mode 100644
index 0000000..0213642
--- /dev/null
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_cleanupTemporaryMarkers.sqf
@@ -0,0 +1,14 @@
+for "_i" from 1 to (count blck_temporaryMarkers) do 
+{
+	if (_i > (count blck_temporaryMarkers)) exitWith {};
+	private _m = blck_temporaryMarkers deleteAt 0;
+	_m params["_marker","_deleteAt"];
+	//diag_log format["_cleanupTemporaryMarkers: _marker = %1 | _deleteAt = %2",_marker, _deleteAt];
+	if (diag_tickTime > _deleteAt) then 
+	{
+		deleteMarker _marker;
+	} else {
+		blck_temporaryMarkers pushBack _m;
+		//diag_log format["_cleanupTemporaryMarkers: wait longer before deleting _marker = %1 | _deleteAt = %2",_marker, _deleteAt];	
+	};
+};
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_getNumberFromRange.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_getNumberFromRange.sqf
index 1a7bce9..c1d2eb3 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_getNumberFromRange.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_getNumberFromRange.sqf
@@ -14,7 +14,7 @@ params["_data"];
 _value = 0;
 if (typeName _data isEqualTo "ARRAY") then
 {
-	params["_min","_max"];
+	_data params["_min","_max"];
 	if (_max > _min) then 
 	{
 		_value = _min + round(random(_max - _min));
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf
index e48abd0..742d4cf 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf
@@ -1,6 +1,12 @@
 /*
 	Credit for this method goes to He-Man who first suggested it.
 */
-_this call EPOCH_server_effectCrypto;
+diag_log format["_fnc_giveTakeCrypto: _this = %1",_this];
+_object = _this select 0;
+diag_log format["_giveTakeCrypto: _object data = %1 | _object = %2",_object call BIS_fnc_objectType, _object];
+if (_object isKindOf "Man") then 
+{
+	_this call EPOCH_server_effectCrypto;
+};
 
 
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf
index 15ab4e5..49d444e 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf
@@ -29,23 +29,10 @@
 
 
 	params["_loadout","_crate",["_addAmmo",0]];
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 2) then
-	{
-		diag_log format["blck_fnc_loadLootFromItemsArray:: _this %1",_this];
-		diag_log format["blck_fnc_loadLootFromItemsArray:: _crate %1 | _addAmmo %2 | _loadout %3",_crate,_addAmmo,_loadout];
-	};
-	#endif
 	if ((_loadout select 0) isEqualTo []) exitWith {};
 	{
 		private["_tries","_q","_item"];
 		_tries = 0;
-		#ifdef blck_debugMode
-		if (blck_debugLevel > 2) then
-		{		
-			diag_log format["blck_fnc_loadLootFromItemsArray:: -- >> now loading for %1",_x];
-		};
-		#endif
 		_q = _x select 1; // this can be a number or array.
 		_tries = [_q] call blck_fnc_getNumberFromRange;
 		for "_i" from 1 to _tries do
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf
index 038412b..5258079 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf
@@ -42,7 +42,9 @@ while {true} do
 		[] call blck_fnc_cleanupAliveAI;
 		[] call blck_fnc_cleanupObjects;
 		[] call blck_fnc_cleanupDeadAI;
-		[] call blck_fnc_scanForPlayersNearVehicles;				
+		[] call blck_fnc_scanForPlayersNearVehicles;
+		[] call GMS_fnc_cleanupTemporaryMarkers;
+		[] call GMS_fnc_updateCrateSignals;				
 		//[] call blck_fnc_cleanEmptyGroups;
 		_timer20sec = diag_tickTime + 20;
 	};
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_missionCompleteMarker.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_missionCompleteMarker.sqf
index bc67f31..112bb7e 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_missionCompleteMarker.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_missionCompleteMarker.sqf
@@ -19,6 +19,7 @@ _MainMarker = createMarker [_name, _location];
 _MainMarker setMarkerColor "ColorBlack";
 _MainMarker setMarkerType "n_hq";
 _MainMarker setMarkerText "Mission Cleared";
-uiSleep 300;
-deleteMarker _MainMarker;
+//uiSleep 300;
+//deleteMarker _MainMarker;
+blck_temporaryMarkers pushBack [_MainMarker, diag_tickTime + 300];
 //diag_log format["missionCompleteMarker complete script for _this = %1",_this];
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf
index 19d7e52..b93ef75 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf
@@ -15,24 +15,19 @@
 	http://creativecommons.org/licenses/by-nc-sa/4.0/
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
-/////////////////////////////////////////////////////
 
 private ["_result","_players"];
 params["_pos","_dist",["_onFootOnly",false]];
 _players = call blck_fnc_allPlayers;
 _result = false;
-//diag_log format["_fnc_playerInRange:: -> _pos = %1 and _dist = %2 and _result = %3",_pos,_dist,_result];
 if !(_onFootOnly) then
 {
 	{
-		//diag_log format["_fnc_playerInRange:: !_onFootOnly -> _pos = %1 and _player = %2 and distance = %3",_pos,_x, _pos distance _x];
 		if ((_x distance2D _pos) < _dist) exitWith {_result = true;};
 	} forEach _players;
 } else {
 	{
-		//diag_log format["_fnc_playerInRange:: onfootOnly -> _pos = %1 and _player = %2 and distance = %3",_pos,_x, _pos distance2d _x];
 		if ( ((_x distance2D _pos) < _dist) && (vehicle _x isEqualTo _x)) exitWith {_result = true;};
 	} forEach _players;
 };
-//diag_log format["_fnc_playerInRange:: returning with _result = %1",_result];
 _result
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf
index 09403a6..662caf6 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf
@@ -15,7 +15,6 @@
 	http://creativecommons.org/licenses/by-nc-sa/4.0/
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
-/////////////////////////////////////////////////////
 
 private ["_result"];
 params["_locations","_dist",["_onFootOnly",false]];
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMarker.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMarker.sqf
index 4a2b95d..dfb31aa 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMarker.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_spawnMarker.sqf
@@ -66,9 +66,7 @@ _blck_fn_configureIconMarker = {
 params["_mArray"];
 private["_marker"];
 _mArray params["_missionMarkerName","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerTypeInfo"];
-
 _markerTypeInfo params["_mShape",["_mSize",[0,0]],["_mBrush","GRID"]];
-
 if (toUpper(_mShape) in ["ELIPSE","ELLIPSE","RECTANGLE"]) then // not an Icon .... 
 {		
 	_marker = [_missionMarkerName,_markerPos,_markerColor,_markerLabel, _mSize,_markerLabelType,_mShape,_mBrush] call _blck_fn_configureRoundMarker;
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateCrateSignals.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateCrateSignals.sqf
new file mode 100644
index 0000000..da6809a
--- /dev/null
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateCrateSignals.sqf
@@ -0,0 +1,41 @@
+
+for "_i" from 1 to (count blck_illuminatedCrates) do 
+{	
+	if (_i > (count blck_illuminatedCrates)) exitWith {};
+	private _c = blck_illuminatedCrates deleteAt 0;
+    _c params["_crate","_smoke","_light","_smokeShell","_lightSource","_refreshTime","_endAt"];
+	//diag_log format["_unpdateCrateSignals: [_crate %1 | _smoke %2 | _light %3 |_smokeShell %4 | _lightSource %5 | curr time %8 | _refreshTime %6 |_endAt %7",_crate,_smoke,_light,_smokeShell,_lightSource,_refreshTime,_endAt,diag_tickTime];
+	if (diag_tickTime < _endAt) then 
+	{
+		if (diag_tickTime > _refreshTime) then 
+		{
+			if !(isNull _smoke) then 
+			{
+				detach _smoke;
+				deleteVehicle _smoke;
+			};
+			if !(isNull _light) then
+			{
+				detach _light;
+				deleteVehicle _light;
+			};
+			_smoke = _smokeShell createVehicle getPosATL _crate;
+			_smoke setPosATL (getPosATL _crate);
+			_smoke attachTo [_crate,[0,0,(0.5)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
+			if(sunOrMoon < 0.2) then
+			{
+				_light = _lightSource createVehicle getPosATL _crate;
+				_light setPosATL (getPosATL _crate);
+				_light attachTo [_crate,[0,0,(0.55)]];
+			};    
+			blck_illuminatedCrates pushBack [_crate,_smoke,_light,_smokeShell,_lightSource,diag_tickTime + 120,_endAt];	
+		} else {
+			//diag_log format["_updateCrateSignals: refresh light at %1",_refreshTime];
+			//blck_illuminatedCrates pushBack [_crate,_smoke,_light,_smokeShell,_lightSource,_refreshTime,_endAt];				
+			blck_illuminatedCrates pushBack _c;
+		};	
+		
+	}  else {
+		//diag_log format["_updateCrateSignals: crate has been illuminated for enough time, no need to continue"];
+	};
+};
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateMarkerAliveCount.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateMarkerAliveCount.sqf
index 7289fa9..90fec22 100644
--- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateMarkerAliveCount.sqf
+++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_updateMarkerAliveCount.sqf
@@ -9,5 +9,4 @@
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 params["_marker","_rootText","_missionAI"];
-//diag_log format["_fnc_updateMarkerAliveCount:  _this = %1",_this];
 _marker setMarkerText format["%1 / %2 AI Alive",_rootText,{alive _x} count _missionAI];
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf
index f93068c..27bb043 100644
--- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf
+++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf
@@ -14,10 +14,6 @@ for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do
 {
 	if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {};
 	_grp = blck_monitoredMissionAIGroups deleteat 0;
-
-	//if (!(_grp isEqualTo grpNull) then
-	//{ 
 	if ({alive _x} count units _grp > 0) then {	blck_monitoredMissionAIGroups pushBack _grp};
-	//};
 };
 
diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf
index 882748a..51ede76 100644
--- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf
+++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf
@@ -14,12 +14,8 @@
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
 private["_group","_wp"];
-
-diag_log format["_fnc_changeToSADWaypoint:: -- :: _this = %1 and typName _this %2",_this, typeName _this];
 _group = group _this;
- diag_log format["_fnc_emplacedWeaponWaypoint:: -- >> group to update is %1 with typeName %2",_group, typeName _group];
 _group setVariable["timeStamp",diag_tickTime];
 _wp = [_group, 0];
 _group setCurrentWaypoint _wp;
- diag_log format["_fnc_emplacedWeaponWaypoint:: -- >> group to update is %1 waypoints updated at %2",_group, (_group getVariable["timeStamp",diag_tickTime])];
 
diff --git a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_findNearestInfantryGroup.sqf b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_findNearestInfantryGroup.sqf
index 70c92d3..c7591d9 100644
--- a/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_findNearestInfantryGroup.sqf
+++ b/@GMS/addons/custom_server/Compiles/Groups/GMS_fnc_findNearestInfantryGroup.sqf
@@ -17,7 +17,6 @@ if (blck_modType == "Epoch") then {_units = (_pos) nearEntities ["I_Soldier_EPOC
 if (blck_modType == "Exile") then {_units = (_pos) nearEntities ["i_g_soldier_unarmed_f", 100]};
 _nearestGroup = group (_units select 0);
 {
-	
 	if ((group _x) != _group) then
 	{
 		if ( _x distance (leader _group) < ((leader _nearestGroup) distance (leader _group)) ) then
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf
index 0121f33..c27befa 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf
@@ -17,32 +17,16 @@
 */
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
-_fn_deleteObjects = {
-	params["_objects"];
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 0) then {diag_log format["_fn_deleteObjects:: -> _objects = %1",_objects];};
-	#endif
-	{
-		#ifdef blck_debugMode
-		if (blck_debugLevel > 1) then {diag_log format["_fnc_cleanUpObjects: -> deleting object %1",_x];};
-		#endif
-		deleteVehicle _x;
-	} forEach _objects;
-};
-
-//diag_log format["_fnc_cleanUpObjects called at %1",diag_tickTime];
 private["_oldObjs"];
 for "_i" from 1 to (count blck_oldMissionObjects) do {
 	if (_i <= count blck_oldMissionObjects) then {
 		_oldObjs = blck_oldMissionObjects deleteat 0;
 		_oldObjs params ["_objarr","_timer"];
 		if (diag_tickTime > _timer) then {
-			[_objarr] call  _fn_deleteObjects;
-			uiSleep 0.1;
-			#ifdef blck_debugMode
-			//diag_log format["_fn_deleteObjects:: blck_oldMissionObjects updated from %1",_obj];
-			if (blck_debugLevel > 1) then {diag_log format["_fn_deleteObjects:: (48)  blck_oldMissionObjects updated to %1",blck_oldMissionObjects];};
-			#endif
+			{
+				deleteVehicle _x;
+			} forEach _objarr;
+			//uiSleep 0.1;
 		}
 		else {
 			blck_oldMissionObjects pushback _oldObjs;
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_crateMarker.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_crateMarker.sqf
index 0e5ca32..114a963 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_crateMarker.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_crateMarker.sqf
@@ -16,28 +16,8 @@ Spawn a crate on land or in the air
 
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
-private["_crate","_light","_beacon","_start","_maxHeight","_bbr","_p1","_p2"];
+// can probably hook this onto signalEnd as they do the same things
+// Left here for legacy compatability with some GRG addons.
 params["_crate"];
-//_crate = _this select 0;
-_start = diag_tickTime;
-// If night, attach a chemlight
-_signal = "SmokeShellOrange";
-if (sunOrMoon < 0.2) then
-{
-	_signal = "FlareYellow_F";
-};
 
-_bbr = boundingBoxReal _crate;
-_p1 = _bbr select 0;
-_p2 = _bbr select 1;
-_maxHeight = abs ((_p2 select 2) - (_p1 select 2));	
-
-while {(diag_tickTime - _start) < 3*60} do
-{
-	_beacon = _signal createVehicle getPosATL _crate;
-	_beacon setPos (getPos _crate);
-	_beacon attachTo [_crate,[0,0,(_maxHeight + 0.05)]];
-	uiSleep 30;
-	deleteVehicle _beacon;
-};
-true
\ No newline at end of file
+[_crate] call blck_fnc_signalEnd;
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf
index d533951..163f585 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf
@@ -19,23 +19,14 @@ _start = diag_tickTime;
 //diag_log format["signalEnd.sqf: _this = %1, _crate = %2",_this, _crate];
 _smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
 _lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
-while {diag_tickTime - _start < (_time)} do  // loop for 5 min accounting for the fact that smoke grenades do not last very long
+_light  = objNull;
+_smoke = _smokeShell createVehicle getPosATL _crate;
+_smoke setPosATL (getPosATL _crate);
+_smoke attachTo [_crate,[0,0,(0.5)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
+if(sunOrMoon < 0.2) then
 {
-	_smoke = _smokeShell createVehicle getPosATL _crate;
-	_smoke setPosATL (getPosATL _crate);
-	_smoke attachTo [_crate,[0,0,(0.5)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
-	if(sunOrMoon < 0.2) then
-	{
-		_light = _lightSource createVehicle getPosATL _crate;
-		_light setPosATL (getPosATL _crate);
-		_light attachTo [_crate,[0,0,(0.55)]];
-	};
-	uiSleep 120;
-	detach _smoke;
-	deleteVehicle _smoke;
-	if(sunOrMoon < 0.2) then
-	{
-		detach _light;
-		deleteVehicle _light;
-	};
-};
\ No newline at end of file
+	_light = _lightSource createVehicle getPosATL _crate;
+	_light setPosATL (getPosATL _crate);
+	_light attachTo [_crate,[0,0,(0.55)]];
+};
+blck_illuminatedCrates  pushBack [_crate,_smoke,_light,_smokeShell,_lightSource,diag_tickTime + 120, diag_tickTime + 300];	
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf
index 6bdaf02..f883cec 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf
@@ -18,7 +18,7 @@ _crate setVariable ["LAST_CHECK", 100000];
 _crate allowDamage false;
 _crate enableRopeAttach false;
 [_crate] call blck_fnc_emptyObject;
-uiSleep 1;
+//uiSleep 1;
 _crate setPosATL [_coords select 0, _coords select 1, (_coords select 2) + 0.25];
 _crate setDir _crateDir;
 //_crate setVectorUp [0,0,1];
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf
index 2d2e7d4..c81845a 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf
@@ -96,25 +96,10 @@ if (blck_debugLevel > 1) then
 	[(_x select 1),0.01,0.02,_empGroup,"random","SAD","emplaced"] spawn blck_fnc_setupWaypoints;
 	if (isNull _empGroup) exitWith {_abort = true};
 
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 1) then
-	{
-		diag_log format["_fnc_spawnEmplacedWeaponArray(82):: typeName _empGroup = %1 and _empGroup = %2 and _x = %3",typeName _empGroup, _empGroup,_x];
-	};
-	#endif
-
 	// params["_vehType","_pos",["_clearInventory",true]];
-	_wep = [(_x select 0),[0,0,0],false,true] call blck_fnc_spawnVehicle;
+	private _wep = [(_x select 0),[0,0,0],false,true] call blck_fnc_spawnVehicle;
 	_wep addMPEventHandler ["MPHit",{[_this] call blck_EH_AIVehicle_HandleDamage}];
-	//_empGroup setVariable["groupVehicle",_wep];
 	_wep setVariable["vehicleGroup",_empGroup];
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 1) then
-	{
-		diag_log format["_fnc_spawnEmplacedWeaponArray (94) spawnVehicle returned value of _wep = %1",_wep];
-	};
-	#endif
-	
 	_wep setVariable["GRG_vehType","emplaced"];	
 	_wep setPos _pos;
 	_wep setdir (random 359);
@@ -125,25 +110,8 @@ if (blck_debugLevel > 1) then
 	_gunner moveingunner _wep;
 	_gunner setVariable["GRG_vehType","emplaced"];
 	_gunner setVariable["GRG_vehicle",_wep];
-	_emplacedAI append _units;
-
-	#ifdef blck_debugMode
-	if (blck_debugLevel > 1) then
-	{
-		diag_log format["_fnc_spawnEmplacedWeaponArray(110):: position of emplaced weapon = %1 and targetd position is %2",getPos _wep, _pos];
-		diag_log format["_fnc_spawnEmplacedWeaponArray(111):: _gunner = %1 and crew _wep = %2",_gunner, crew _wep];
-	};
-	#endif
-		
+	_emplacedAI append _units;		
 } forEach _missionEmplacedWeapons;
 blck_monitoredVehicles append _emplacedWeps;
 _return = [_emplacedWeps,_emplacedAI,_abort];
-
-#ifdef blck_debugMode
-if (blck_debugLevel > 1) then
-{
-	diag_log format["_fnc_spawnEmplacedWeaponArray:: returning with _return = _emplacedWeps = %1",_return];
-};
-#endif
-
 _return
diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf
index 76871fa..660844e 100644
--- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf
+++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf
@@ -88,8 +88,9 @@ _fnc_dropMissionCrates = {
 				_location = getPos _x;
 				_blck_localMissionMarker = [format["crateMarker%1%2",_location select 0, _location select 1],_location,"","","ColorBlack",["mil_dot",[]]];
 				_marker = [_blck_localMissionMarker] call blck_fnc_spawnMarker;
-				_markers pushBack _marker; 
-				uiSleep 0.5;
+				//_markers pushBack _marker; 
+				blck_temporaryMarkers pushBack [_marker,diag_tickTime + 300];
+				//uiSleep 0.5;
 				_curPosCrate = getPos _x;
 				_x setPos [_curPosCrate select 0, _curPosCrate select 1, 0.3];
 				//_x setVectorDirAndUp[[0,1,0],[0,0,1]];
@@ -97,11 +98,11 @@ _fnc_dropMissionCrates = {
 		} forEach _crates;
 	};
 
-	uisleep 300;
+	//uisleep 300;
 	
-	{
-		deleteMarker _x;
-	}forEach _markers
+	//{
+		//deleteMarker _x;
+	//}forEach _markers
 };
 
 if (_spawnCrateTiming in ["atMissionEndAir","atMissionStartAir"]) then 
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_handlePlayerUpdates.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_handlePlayerUpdates.sqf
new file mode 100644
index 0000000..6f77a8d
--- /dev/null
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_handlePlayerUpdates.sqf
@@ -0,0 +1,87 @@
+/*
+	calculate a reward player for AI Kills in crypto.
+	Code fragment adapted from VEMF
+	call as [_unit,_killer] call blck_fnc_handlePlayerUpdates;
+	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 _player = _killer;
+diag_log format["_fnc_handlePlayerUpdates: typeOf (vehicle _killer) = %2 | vehicle(_killer) isKindOf Man =  %1",(vehicle _killer) isKindOf "Man",typeOf (vehicle _killer)];
+diag_log format[" : uid _killer = %1 | netID _killer = %2 | netID vehicle(_killer) = %3",if(isPlayer _killer) then {getPlayerUID _killer} else {-1},netID _killer,netID (vehicle(_killer))];
+private _killerType = _killer call BIS_fnc_objectType; //     anObject call BIS_fnc_objectType 
+private _killerVehicleType = (vehicle _killer) call BIS_fnc_objectType;
+diag_log format["_killerType = %1 | _killerVehicleType = %2",_killerType,_killerVehicleType];
+if (_killerType select 0 isEqualTo "Vehicle") then 
+{
+	{
+		if (_x isEqualTo _killer) exitWith {_player = _x};
+	}forEach (crew (vehicle _killer));
+	diag_log format["_fnc_handlePlayerUpdates:[find crew slot of player] _killer = %1 | _player set to %2 | vehicle _player = %3",_killer,_player,vehicle _player];
+};
+private _playerType = _player call BIS_fnc_objectType;
+diag_log format["(35)_fnc_handlePlayerUpdates: _playerType = %1 | _player set to %2 | vehicle _player = %3",_playerType,_player,vehicle _player];
+private _lastkill = _player getVariable["blck_lastkill",diag_tickTime];
+_player setVariable["blck_lastkill",diag_tickTime];
+private _kills = (_player getVariable["blck_kills",0]) + 1;
+if ((diag_tickTime - _lastkill) < 240) then
+{
+	_player setVariable["blck_kills",_kills];
+} else {
+	_player setVariable["blck_kills",0];
+};
+
+if (toLower(blck_modType) isEqualTo "epoch") then
+{
+	#define maxReward 2500
+	private _distanceBonus = floor((_unit distance _player)/100);
+	private _killstreakBonus = 3 * (_player getVariable["blck_kills",0]);
+	private _reward = 25 + _distanceBonus + _killstreakBonus;
+	//if (_reward > maxReward) then {_reward = maxReward};
+	diag_log format["_fnc_handlePlayerUpdates (43): _killer = %1 | vehicle(_killer) = %2 | typeName _killer = %3",_player,vehicle _player, typeName _player];
+	[_player,_reward ] call blck_fnc_giveTakeCrypto;
+	if (blck_useKillScoreMessage) then
+	{
+		[["showScore",[_reward,"",_kills],""],[_player]] call blck_fnc_messageplayers;
+	};
+};
+if (toLower(blck_modType) isEqualTo "exile") then
+{
+	private _distanceBonus = floor((_unit distance _player)/100);
+	private _killstreakBonus = 3 * (_player getVariable["blck_kills",0]);
+	private _respectGained = 25 + _distanceBonus + _killstreakBonus;
+	private _score = _player getVariable ["ExileScore", 0];
+	_score = _score + (_respectGained);
+	_player setVariable ["ExileScore", _score];
+	format["setAccountScore:%1:%2", _score,getPlayerUID _player] call ExileServer_system_database_query_fireAndForget;
+	private _newKillerFrags = _player getVariable ["ExileKills", 0];
+	_newKillerFrags = _newKillerFrags + 1;
+	_player setVariable ["ExileKills", _newKillerFrags];
+	format["addAccountKill:%1", getPlayerUID _player] call ExileServer_system_database_query_fireAndForget;
+	_player call ExileServer_object_player_sendStatsUpdate;
+	if (blck_useKillScoreMessage) then
+	{
+		[["showScore",[_respectGained,_distanceBonus,_kills]], [_player]] call blck_fnc_messageplayers;
+	};
+};
+if (blck_useKillMessages) then
+{
+	private _weapon = currentWeapon _player;
+	_killstreakMsg = format[" %1X KILLSTREAK",_kills];
+	private["_message"];
+	if (blck_useKilledAIName) then
+	{
+		_message = format["[blck] %2: killed by %1 from %3m",name _player,name _unit,round(_unit distance _player)];
+	}else{
+		_message = format["[blck] %1 killed with %2 from %3 meters",name _player,getText(configFile >> "CfgWeapons" >> _weapon >> "DisplayName"), round(_unit distance _player)];
+	};
+	_message =_message + _killstreakMsg;
+	[["aikilled",_message,"victory"],allPlayers] call blck_fnc_messageplayers;
+};
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_placeCharacterInBuilding.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_placeCharacterInBuilding.sqf
index e6f2ece..1cafabb 100644
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_placeCharacterInBuilding.sqf
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_placeCharacterInBuilding.sqf
@@ -16,7 +16,7 @@ private ["_obj"];
 if !(_characterBuildingConfigs isEqualTo []) then
 {
 	_obj = createVehicle[(_characterBuildingConfigs select 0),_center vectorAdd (_characterBuildingConfigs select 1),[],0,"CAN_COLLIDE"];
-	diag_log format["_fnc_placeCharacterInBuilding:  _obj = %1",_obj];
+	//diag_log format["_fnc_placeCharacterInBuilding:  _obj = %1",_obj];
 	_obj setDir (_characterBuildingConfigs select 2);
 	_obj allowDamage true;
 	_obj enableDynamicSimulation true;		
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf
index d25afe3..f1deff9 100644
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf
@@ -14,17 +14,24 @@
 // assumptions: this is always run on the server rgardless if th event is triggered on an HC or other client.
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
-private["_group","_isLegal","_weapon","_lastkill","_kills","_message","_killstreakMsg"];
-params["_unit","_killer"/*,"_instigator"*/];
-if (_unit getVariable["blck_cleanupAt",-1] > 0) exitWith {};
+params["_unit","_killer","_instigator"];
+diag_log format["_fnc_processAIKill: _unit = %1 | _killer = %2 | _instigator = %3" ,_unit,_killer,_instigator];
+if (_unit getVariable["blck_cleanupAt",-1] > 0) exitWith {};  // this is here so that the script is not accidently run more than once for each MPKilled occurrence.
 _unit setVariable ["blck_cleanupAt", (diag_tickTime) + blck_bodyCleanUpTimer];
 blck_deadAI pushback _unit;
-_group = group _unit;
+private _group = group _unit;
 [_unit] joinSilent grpNull;
-if (count(units _group) < 1) then 
+if (count(units _group) == 0) then 
 {
 	deleteGroup _group;
 };
+diag_log format[
+	"_fnc_processAIKill: _killer = %1 | vehicle _killer = %2 | typeOf (vehicle _killer = %3) | driver(vehicle _killer) = %4",
+	_killer,
+	vehicle _killer,
+	typeOf(vehicle _killer),
+	driver(vehicle _killer)
+	];
 
 if !((vehicle _unit) isEqualTo _unit) then 
 {
@@ -35,6 +42,7 @@ if !((vehicle _unit) isEqualTo _unit) then
 		diag_log format["_processAIKill: no units alive in vehicle %1 of type %2",_veh, typeOf _veh];
 		if (_veh getVariable["GRG_vehType","none"] isEqualTo "emplaced") then
 		{
+			diag_log format["_fnc_processAIKill: emplaced weapon %1 being handled",_veh];
 			[_veh] call GMS_fnc_handleEmptyStaticWeapon;			
 		} else {
 			if (blck_killEmptyAIVehicles) then
@@ -58,48 +66,28 @@ if !((vehicle _unit) isEqualTo _unit) then
 	};
 };
 
-if (blck_launcherCleanup) then {[_unit] call blck_fnc_removeLaunchers;};
-if (blck_removeNVG) then {[_unit] call blck_fnc_removeNVG;};
+if (blck_launcherCleanup) then {[_unit] call blck_fnc_removeLaunchers};
+if (blck_removeNVG) then {[_unit] call blck_fnc_removeNVG};
 if !(isPlayer _killer) exitWith {};
 
 [_unit,_killer] call blck_fnc_alertGroupUnits;
 [_killer] call blck_fnc_alertNearbyVehicles;
-_wp = [_group, currentWaypoint _group];
+if (vehicle _killer != _killer) then 
+{
+	[_unit, vehicle _killer] call GMS_fnc_revealVehicleToUnits;
+};
+private _wp = [_group, currentWaypoint _group];
 _wp setWaypointBehaviour "COMBAT";
 _group setCombatMode "RED";
 _wp setWaypointCombatMode "RED";
-_isLegal = [_unit,_killer] call blck_fnc_processIlleagalAIKills;
-if !(_isLegal) exitWith {};
-_lastkill = _killer getVariable["blck_lastkill",diag_tickTime];
-_killer setVariable["blck_lastkill",diag_tickTime];
-_kills = (_killer getVariable["blck_kills",0]) + 1;
-if ((diag_tickTime - _lastkill) < 240) then
-{
-	_killer setVariable["blck_kills",_kills];
-} else {
-	_killer setVariable["blck_kills",0];
-};
 
-if (blck_useKillMessages) then
-{
-	_weapon = currentWeapon _killer;
-	_killstreakMsg = format[" %1X KILLSTREAK",_kills];
-
-	if (blck_useKilledAIName) then
-	{
-		_message = format["[blck] %2: killed by %1 from %3m",name _killer,name _unit,round(_unit distance _killer)];
-	}else{
-		_message = format["[blck] %1 killed with %2 from %3 meters",name _killer,getText(configFile >> "CfgWeapons" >> _weapon >> "DisplayName"), round(_unit distance _killer)];
-	};
-	_message =_message + _killstreakMsg;
-	[["aikilled",_message,"victory"],allPlayers] call blck_fnc_messageplayers;
-};
-
-[_unit,_killer] call blck_fnc_rewardKiller;
 if (blck_showCountAliveAI) then
 {
 	{
 		[_x select 0, _x select 1, _x select 2] call blck_fnc_updateMarkerAliveCount;
 	} forEach blck_missionMarkers;
 };
-
+private _isLegal = [_unit,_killer] call blck_fnc_processIlleagalAIKills;
+diag_log format["_fnc_processAIKill: _isLegal = %1",_isLegal];
+if !(_isLegal) exitWith {};
+[_unit,_killer] call GMS_fnc_handlePlayerUpdates;
\ No newline at end of file
diff --git a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf
index e9f354a..691def4 100644
--- a/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf
+++ b/@GMS/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf
@@ -20,11 +20,10 @@
 private["_missionType","_wasRunover","_launcher","_legal"];
 params["_unit","_killer"];
 _legal = true;
-
-if (vehicle _killer == _killer) exitWith {true};  // Player not in vehicle, no further checks needed.
+if (vehicle _killer == _killer) exitWith {true};  
+// Player not in vehicle, no further checks needed.
 if (_killer == (driver (vehicle _killer))) then //  If the killer is also the driver then the killer must have run the AI over
 {
-	[_unit, vehicle _killer] call GMS_fnc_revealVehicleToUnits;
 	if(blck_RunGear && !((vehicle _killer) isKindOf "Air")) then // assume aircraft are too fragile to kill AI by moving close to ground
 	{   
 		[_unit] call GMS_fnc_removeAllAIgear;
@@ -38,14 +37,19 @@ if (_killer == (driver (vehicle _killer))) then //  If the killer is also the dr
 } else {
 	if ( blck_VK_GunnerDamage ) then
 	{
-		if ((typeOf vehicle _killer) in blck_forbidenVehicles || (currentWeapon _killer) in blck_forbidenVehicleGuns) then 
+		if ((typeOf (vehicle _killer)) in blck_forbidenVehicles || (currentWeapon _killer) in blck_forbidenVehicleGuns) then 
 		{
 			if (blck_VK_Gear) then {[_unit] call GMS_fnc_removeAllAIgear;};
-			[_unit, vehicle _killer] call GMS_fnc_revealVehicleToUnits;
 			[vehicle _killer] call GMS_fnc_applyVehicleDamagePenalty;
 			[_killer] call GMS_fnc_msgIED;
 			_legal = false;
+			diag_log format[
+			"_fnc_processIlleagalKills: _legal = %1 | (typeOf (vehicle _killer)) in blck_forbidenVehicles = %2 | (currentWeapon _killer) in blck_forbidenVehicleGuns) = %3",
+			_legal,(typeOf (vehicle _killer)) in blck_forbidenVehicles,
+			(currentWeapon _killer) in blck_forbidenVehicleGuns
+			];
 		};
 	};
 };
+diag_log format["_fnc_testForIllegalKills: _legal = %1",_legal];
 _legal
diff --git a/@GMS/addons/custom_server/Compiles/blck_functions.sqf b/@GMS/addons/custom_server/Compiles/blck_functions.sqf
index 67a85c8..47247c6 100644
--- a/@GMS/addons/custom_server/Compiles/blck_functions.sqf
+++ b/@GMS/addons/custom_server/Compiles/blck_functions.sqf
@@ -2,7 +2,6 @@
 	AI Mission for Epoch Mod for Arma 3
 	By Ghostrider
 	Functions and global variables used by the mission system.
-	Last modified 3/20/17
 	
 	--------------------------
 	License
@@ -36,17 +35,13 @@ private _functions = [
 	["blck_fnc_deleteMarker","\q\addons\custom_server\Compiles\Functions\GMS_fnc_deleteMarker.sqf"],
 	["blck_fnc_updateMarkerAliveCount","\q\addons\custom_server\Compiles\Functions\GMS_fnc_updateMarkerAliveCount.sqf"],
 	["blck_fnc_addMoneyToObject","\q\addons\custom_server\Compiles\Functions\GMS_fnc_addMoneyToObject.sqf"],
-	["blck_fnc_spawnMissionEmplacedRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionEmplacedRelative.sqf"],
-	["blck_fnc_spawnMissionLootBoxesRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLootBoxesRelative.sqf"],
-	["blck_fnc_spawnSingleObject","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnSingleObject.sqf"],
-	//["blck_fnc_emptyObjectInventory","\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObjectInventory.sqf"],
-	["blck_fnc_spawnMissionLandscapeRelative","\q\addons\custom_server\Compiles\Functions\GMS_fnc_spawnMissionLandscapeRelative.sqf"],
 	["blck_fnc_nearestPlayers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_nearestPlayers.sqf"],
 	["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"],
 
 	// Player-related functions
-	["blck_fnc_rewardKiller","\q\addons\custom_server\Compiles\Units\GMS_fnc_rewardKiller.sqf"],
+	["GMS_fnc_handlePlayerUpdates","\q\addons\custom_server\Compiles\Units\GMS_fnc_handlePlayerUpdates.sqf"],
 	["blck_fnc_MessagePlayers","\q\addons\custom_server\Compiles\Functions\GMS_fnc_AIM.sqf"],	 // Send messages to players regarding Missions
 
 	// Mission-related functions
@@ -159,10 +154,7 @@ private _functions = [
 
 	// HC support functions
 	["blck_fnc_HC_XferGroup","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf"],
-	//["blck_fnc_onPlayerDisconnected","\q\addons\custom_server\Compiles\HC\GMS_fnc_onPlayerDisconnected.sqf"],
-	//["blck_fnc_HC_monitor","\q\addons\custom_server\Compiles\HC\GMS_fnc_HCmonitor.sqf"],
 	["blck_fnc_HC_passToHCs","\q\addons\custom_server\Compiles\HC\GMS_fnc_passToHCs.sqf"],
-	//["blck_fnc_HC_getListConnected","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_getListConnected.sqf"],
 	["blck_fnc_HC_leastBurdened","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_leastBurdened.sqf"],
 	["blck_fnc_HC_countGroupsAssigned","\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf"]
 ];
@@ -177,6 +169,6 @@ blck_fnc_broadcastServerFPS = compileFinal  preprocessFileLineNumbers "\q\addons
 diag_log "blck_functions loaded using GRGserver settings ---- >>>> ";
 #endif
 
-onPlayerDisconnected {[_name,_owner] call blck_fnc_onPlayerDisconnected;};
+//onPlayerDisconnected {[_name,_owner] call blck_fnc_onPlayerDisconnected;};
 
 
diff --git a/@GMS/addons/custom_server/Compiles/blck_variables.sqf b/@GMS/addons/custom_server/Compiles/blck_variables.sqf
index 3a7a168..49a6930 100644
--- a/@GMS/addons/custom_server/Compiles/blck_variables.sqf
+++ b/@GMS/addons/custom_server/Compiles/blck_variables.sqf
@@ -41,7 +41,8 @@ blck_deadAI = [];
 blck_connectedHCs = [];
 blck_missionMarkers = [];
 blck_heliCrashSites = [];
-
+blck_temporaryMarkers = [];
+blck_illuminatedCrates = []; // [crate,duration,freq of replacement]
 blck_mainThreadUpdateInterval = 60;
 blck_revealMode = "detailed"; //""basic" /*group or vehicle level reveals*/,detailed /*unit by unit reveals*/";
 diag_log "[blckeagls] Variables Loaded";
diff --git a/@GMS/addons/custom_server/Configs/blck_configs.sqf b/@GMS/addons/custom_server/Configs/blck_configs.sqf
index 9973165..2e057b3 100644
--- a/@GMS/addons/custom_server/Configs/blck_configs.sqf
+++ b/@GMS/addons/custom_server/Configs/blck_configs.sqf
@@ -17,7 +17,7 @@
 		changing any of these variables may break the mission systemChat
 	*/
 	blck_locationBlackList = [];  // Do not touch ...
-	blck_debugON = false;  //  Do not touch ... 
+	blck_debugON = true;  //  Do not touch ... 
 	blck_debugLevel = 0;  //  Do not touch ... 
 	#ifdef blck_milServer
 	if (true) exitWith 
@@ -127,14 +127,16 @@
 	
 	blck_RunGear = true;	// When set to true, AI that have been run over will ve stripped of gear, and the vehicle will be given blck_RunGearDamage of damage.
 	blck_RunGearDamage = 0.2; // Damage applied to player vehicle for each AI run over
-	blck_VK_Gear = true; // When set to true, AI that have been killed by a player in a vehicle in the list of forbidden vehicles or using a forbiden gun will be stripped of gear and the vehicle will be given blck_RunGearDamage of damage
+	blck_VK_Gear = false; // When set to true, AI that have been killed by a player in a vehicle in the list of forbidden vehicles or using a forbiden gun will be stripped of gear and the vehicle will be given blck_RunGearDamage of damage
 	blck_VK_RunoverDamage = true; // when the AI was run over blck_RunGearDamage of damage will be applied to the killer's vehicle.
 	blck_VK_GunnerDamage = false; // when the AI was killed by a gunner on a vehicle that is is in the list of forbidden vehicles, blck_RunGearDamage of damage will be applied to the killer's vehicle each time an AI is killed with a vehicle's gun.
-	blck_forbidenVehicles = ["B_MRAP_01_hmg_F","O_MRAP_02_hmg_F","I_MRAP_03_hmg_F","B_MRAP_01_hmg_F","O_MRAP_02_hmg_F"]; // Add any vehicles for which you wish to forbid vehicle kills	
+	//blck_forbidenVehicles = ["B_MRAP_01_hmg_F","O_MRAP_02_hmg_F","I_MRAP_03_hmg_F","B_MRAP_01_hmg_F","O_MRAP_02_hmg_F"]; // Add any vehicles for which you wish to forbid vehicle kills	
+	blck_forbidenVehicles = [];
+	
 	// For a listing of the guns mounted on various land vehicles see the following link: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Vehicle_Weapons
 	// HMG_M2 is mounted on the armed offroad that is spawned by Epoch	
-	blck_forbidenVehicleGuns = ["LMG_RCWS","LMG_M200","HMG_127","HMG_127_APC","HMG_M2","HMG_NSVT","GMG_40mm","GMG_UGV_40mm","autocannon_40mm_CTWS","autocannon_30mm_CTWS","autocannon_35mm","LMG_coax","autocannon_30mm","HMG_127_LSV_01"]; // Add any vehicles for which you wish to forbid vehicle kills, o
-	
+	//blck_forbidenVehicleGuns = ["LMG_RCWS","LMG_M200","HMG_127","HMG_127_APC","HMG_M2","HMG_NSVT","GMG_40mm","GMG_UGV_40mm","autocannon_40mm_CTWS","autocannon_30mm_CTWS","autocannon_35mm","LMG_coax","autocannon_30mm","HMG_127_LSV_01"]; // Add any vehicles for which you wish to forbid vehicle kills, o
+	blck_forbidenVehicleGuns = [];
 
 	///////////////////////////////
 	// MISC MISSION PARAMETERS
diff --git a/@GMS/addons/custom_server/Missions/GMS_missionLists.sqf b/@GMS/addons/custom_server/Missions/GMS_missionLists.sqf
index 95b7996..4e6de01 100644
--- a/@GMS/addons/custom_server/Missions/GMS_missionLists.sqf
+++ b/@GMS/addons/custom_server/Missions/GMS_missionLists.sqf
@@ -14,8 +14,8 @@
 #include "\q\addons\custom_server\Configs\blck_defines.hpp";
 
 _pathBlue = "Blue";
-//_missionListBlue = ["captive1"];
-_missionListBlue = ["default","captive1","hostage1"/*,"default2"/*,"medicalCamp","redCamp","resupplyCamp"*/];
+_missionListBlue = ["default"];
+//_missionListBlue = ["default","captive1","hostage1"/*,"default2"/*,"medicalCamp","redCamp","resupplyCamp"*/];
 
 _pathRed = "Red";
 //_missionListRed = ["resupplyCamp"];
diff --git a/@GMS/addons/custom_server/TODO b/@GMS/addons/custom_server/TODO
new file mode 100644
index 0000000..3a6e6e7
--- /dev/null
+++ b/@GMS/addons/custom_server/TODO
@@ -0,0 +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.
+  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.
+    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.
+  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.
+  9. Check that trader zones are detected properly in Exile.
+Todo:
+  ☐ Item
diff --git a/@GMS/addons/custom_server/init/build.sqf b/@GMS/addons/custom_server/init/build.sqf
index 736e54c..5a1de64 100644
--- a/@GMS/addons/custom_server/init/build.sqf
+++ b/@GMS/addons/custom_server/init/build.sqf
@@ -1,4 +1,4 @@
 
-#define blck_buildNumber 170
+#define blck_buildNumber 172
 #define blck_versionNumber 6.90
-
+#define blck_buildDate "5-13-19"