diff --git a/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java b/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
index b3331294e483d300231baee3cae692d47d18c6f3..5ef71d3e0df5689ed3519aadc63201e50864d7b2 100644
--- a/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
+++ b/L2J_DataPack/dist/game/data/scripts/ai/individual/Baium/Baium.java
@@ -100,7 +100,6 @@ public final class Baium extends AbstractNpcAI
 	// Misc
 	private L2GrandBossInstance _baium = null;
 	private static long _lastAttack = 0;
-	private static L2PcInstance _standbyPlayer = null;
 	
 	private Baium()
 	{
@@ -213,6 +212,7 @@ public final class Baium extends AbstractNpcAI
 					_lastAttack = System.currentTimeMillis();
 					startQuestTimer("WAKEUP_ACTION", 50, _baium, null);
 					startQuestTimer("MANAGE_EARTHQUAKE", 2000, _baium, null);
+					startQuestTimer("SOCIAL_ACTION", 10000, _baium, player);
 					startQuestTimer("CHECK_ATTACK", 60000, _baium, null);
 				}
 				break;
@@ -231,7 +231,6 @@ public final class Baium extends AbstractNpcAI
 				{
 					zone.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(), 40, 10));
 					zone.broadcastPacket(new PlaySound("BS02_A"));
-					startQuestTimer("SOCIAL_ACTION", 8000, npc, player);
 				}
 				break;
 			}
@@ -253,10 +252,18 @@ public final class Baium extends AbstractNpcAI
 						player.teleToLocation(BAIUM_GIFT_LOC);
 						startQuestTimer("PLAYER_KILL", 3000, npc, player);
 					}
-					else if ((_standbyPlayer != null) && _standbyPlayer.isInsideRadius(npc, 16000, true, false))
+					else
 					{
-						_standbyPlayer.teleToLocation(BAIUM_GIFT_LOC);
-						startQuestTimer("PLAYER_KILL", 3000, npc, _standbyPlayer);
+						L2PcInstance randomPlayer = getRandomPlayer(npc);
+						if (randomPlayer != null)
+						{
+							randomPlayer.teleToLocation(BAIUM_GIFT_LOC);
+							startQuestTimer("PLAYER_KILL", 3000, npc, randomPlayer);
+						}
+						else
+						{
+							startQuestTimer("PLAYER_KILL", 3000, npc, null);
+						}
 					}
 				}
 				break;
@@ -266,20 +273,20 @@ public final class Baium extends AbstractNpcAI
 				if ((player != null) && player.isInsideRadius(npc, 16000, true, false))
 				{
 					zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
-					broadcastNpcSay(npc, Say2.NPC_ALL, player.getName() + ", How dare you wake me! Now you shall die!"); // TODO: replace with NpcStringId when are done core support
+					broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.HOW_DARE_YOU_WAKE_ME_NOW_YOU_SHALL_DIE, player.getName());
 					npc.setTarget(player);
 					npc.doCast(BAIUM_PRESENT.getSkill());
 				}
 				
-				for (L2PcInstance players : zone.getPlayersInside())
+				for (L2PcInstance insidePlayer : zone.getPlayersInside())
 				{
-					if (players.isHero())
+					if (insidePlayer.isHero())
 					{
-						zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.NOT_EVEN_THE_GODS_THEMSELVES_COULD_TOUCH_ME_BUT_YOU_S1_YOU_DARE_CHALLENGE_ME_IGNORANT_MORTAL, 2, 4000, players.getName()));
+						zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.NOT_EVEN_THE_GODS_THEMSELVES_COULD_TOUCH_ME_BUT_YOU_S1_YOU_DARE_CHALLENGE_ME_IGNORANT_MORTAL, 2, 4000, insidePlayer.getName()));
 						break;
 					}
 				}
-				startQuestTimer("SPAWN_ARCHANGEL", 8000, npc, null);
+				startQuestTimer("SPAWN_ARCHANGEL", 8000, npc, player);
 				break;
 			}
 			case "SPAWN_ARCHANGEL":
@@ -296,19 +303,12 @@ public final class Baium extends AbstractNpcAI
 				{
 					addAttackPlayerDesire(npc, player);
 				}
-				else if ((_standbyPlayer != null) && !_standbyPlayer.isDead())
-				{
-					addAttackPlayerDesire(npc, _standbyPlayer);
-				}
 				else
 				{
-					for (L2Character creature : npc.getKnownList().getKnownCharactersInRadius(2000))
+					L2PcInstance randomPlayer = getRandomPlayer(npc);
+					if (randomPlayer != null)
 					{
-						if ((creature != null) && creature.isPlayer() && zone.isInsideZone(creature) && !creature.isDead())
-						{
-							addAttackPlayerDesire(npc, (L2Playable) creature);
-							break;
-						}
+						addAttackPlayerDesire(npc, randomPlayer);
 					}
 				}
 				break;
@@ -377,6 +377,7 @@ public final class Baium extends AbstractNpcAI
 			{
 				if ((npc != null) && ((_lastAttack + 1800000) < System.currentTimeMillis()))
 				{
+					cancelQuestTimers("SELECT_TARGET");
 					notifyEvent("CLEAR_ZONE", null, null);
 					addSpawn(BAIUM_STONE, BAIUM_LOC, false, 0);
 					setStatus(ALIVE);
@@ -560,6 +561,7 @@ public final class Baium extends AbstractNpcAI
 			startQuestTimer("CLEAR_STATUS", respawnTime, null, null);
 			startQuestTimer("CLEAR_ZONE", 900000, null, null);
 			cancelQuestTimer("CHECK_ATTACK", npc, null);
+			cancelQuestTimers("SELECT_TARGET");
 		}
 		return super.onKill(npc, killer, isSummon);
 	}
@@ -572,11 +574,6 @@ public final class Baium extends AbstractNpcAI
 			return super.onSeeCreature(npc, creature, isSummon);
 		}
 		
-		if (creature.isPlayer() && !creature.isDead() && (_standbyPlayer == null))
-		{
-			_standbyPlayer = (L2PcInstance) creature;
-		}
-		
 		if (creature.isInCategory(CategoryType.CLERIC_GROUP))
 		{
 			if (npc.getCurrentHp() < (npc.getMaxHp() * 0.25))
@@ -785,6 +782,18 @@ public final class Baium extends AbstractNpcAI
 		}
 	}
 	
+	private L2PcInstance getRandomPlayer(L2Npc npc)
+	{
+		for (L2Character creature : npc.getKnownList().getKnownCharactersInRadius(2000))
+		{
+			if ((creature != null) && creature.isPlayer() && zone.isInsideZone(creature) && !creature.isDead())
+			{
+				return (L2PcInstance) creature;
+			}
+		}
+		return null;
+	}
+	
 	public static void main(String[] args)
 	{
 		new Baium();
diff --git a/L2J_DataPack/dist/game/data/scripts/custom/events/Elpies/Elpies.java b/L2J_DataPack/dist/game/data/scripts/custom/events/Elpies/Elpies.java
index b8d9b25d84414eb1672ff19309387ddc7b2eb325..8f9fe6935df32acefbd846daa21a7b02ef16c3ef 100644
--- a/L2J_DataPack/dist/game/data/scripts/custom/events/Elpies/Elpies.java
+++ b/L2J_DataPack/dist/game/data/scripts/custom/events/Elpies/Elpies.java
@@ -18,12 +18,12 @@
  */
 package custom.events.Elpies;
 
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.ThreadPoolManager;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -64,8 +64,8 @@ public final class Elpies extends Event
 	// @formatter:on
 	// Non-final variables
 	private static boolean EVENT_ACTIVE = false;
-	private static int CURRENT_ELPY_COUNT = 0;
 	private ScheduledFuture<?> _eventTask = null;
+	private final Set<L2Npc> _elpies = ConcurrentHashMap.newKeySet(ELPY_AMOUNT);
 	
 	private Elpies()
 	{
@@ -101,13 +101,11 @@ public final class Elpies extends Event
 		EventLocation[] locations = EventLocation.values();
 		EventLocation randomLoc = locations[getRandom(locations.length)];
 		
-		CURRENT_ELPY_COUNT = 0;
 		long despawnDelay = EVENT_DURATION_MINUTES * 60000;
 		
 		for (int i = 0; i < ELPY_AMOUNT; i++)
 		{
-			addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
-			CURRENT_ELPY_COUNT++;
+			_elpies.add(addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay));
 		}
 		
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
@@ -139,14 +137,11 @@ public final class Elpies extends Event
 			_eventTask = null;
 		}
 		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
+		for (L2Npc npc : _elpies)
 		{
-			L2Npc npc = spawn.getLastSpawn();
-			if (npc != null)
-			{
-				npc.deleteMe();
-			}
+			npc.deleteMe();
 		}
+		_elpies.clear();
 		
 		Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
 		Broadcast.toAllOnlinePlayers("Elpy Event finished!");
@@ -158,11 +153,12 @@ public final class Elpies extends Event
 	{
 		if (EVENT_ACTIVE)
 		{
+			_elpies.remove(npc);
+			
 			dropItem(npc, killer, DROPLIST_CONSUMABLES);
 			dropItem(npc, killer, DROPLIST_CRYSTALS);
-			CURRENT_ELPY_COUNT--;
 			
-			if (CURRENT_ELPY_COUNT <= 0)
+			if (_elpies.isEmpty())
 			{
 				Broadcast.toAllOnlinePlayers("All elpies have been killed!");
 				eventStop();
diff --git a/L2J_DataPack/dist/game/data/scripts/custom/events/Rabbits/Rabbits.java b/L2J_DataPack/dist/game/data/scripts/custom/events/Rabbits/Rabbits.java
index 2ca12435e9521b720de8cc48d50e897c897dd3a6..8232152b3162ba51d363840321965b61927cad78 100644
--- a/L2J_DataPack/dist/game/data/scripts/custom/events/Rabbits/Rabbits.java
+++ b/L2J_DataPack/dist/game/data/scripts/custom/events/Rabbits/Rabbits.java
@@ -20,7 +20,8 @@ package custom.events.Rabbits;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Object;
@@ -51,7 +52,7 @@ public final class Rabbits extends Event
 	private static final int EVENT_TIME = 10;
 	private static final int TOTAL_CHEST_COUNT = 75;
 	private static final int TRANSFORMATION_ID = 105;
-	private final List<L2Npc> _npcs = new CopyOnWriteArrayList<>();
+	private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet(TOTAL_CHEST_COUNT + 1);
 	private final List<L2PcInstance> _players = new ArrayList<>();
 	private boolean _isActive = false;
 	
@@ -142,16 +143,13 @@ public final class Rabbits extends Event
 		// Despawn NPCs
 		for (L2Npc npc : _npcs)
 		{
-			if (npc != null)
-			{
-				npc.deleteMe();
-			}
+			npc.deleteMe();
 		}
 		_npcs.clear();
 		
 		for (L2PcInstance player : _players)
 		{
-			if ((player != null) && (player.getTransformationId() == TRANSFORMATION_ID))
+			if (player.getTransformationId() == TRANSFORMATION_ID)
 			{
 				player.untransform();
 			}
@@ -213,7 +211,7 @@ public final class Rabbits extends Event
 				npc.deleteMe();
 				_npcs.remove(npc);
 				
-				if (_npcs.size() <= 1)
+				if (_npcs.isEmpty())
 				{
 					Broadcast.toAllOnlinePlayers("Rabbits Event: No more chests...");
 					eventStop();
@@ -253,7 +251,7 @@ public final class Rabbits extends Event
 		}
 	}
 	
-	private static void recordSpawn(List<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
+	private static void recordSpawn(Set<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	{
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
 		if (npc.getId() == CHEST)
diff --git a/L2J_DataPack/dist/game/data/scripts/custom/events/Race/Race.java b/L2J_DataPack/dist/game/data/scripts/custom/events/Race/Race.java
index 5741066e7632135e55a5ed270727007c8b4243d8..4ffeab49b2b506f3e396d4fadce622760eb4474e 100644
--- a/L2J_DataPack/dist/game/data/scripts/custom/events/Race/Race.java
+++ b/L2J_DataPack/dist/game/data/scripts/custom/events/Race/Race.java
@@ -18,9 +18,8 @@
  */
 package custom.events.Race;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 
 import com.l2jserver.Config;
@@ -42,11 +41,11 @@ import com.l2jserver.gameserver.util.Broadcast;
 public final class Race extends Event
 {
 	// Event NPC's list
-	private List<L2Npc> _npclist;
+	private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet();
 	// Npc
 	private L2Npc _npc;
 	// Player list
-	private List<L2PcInstance> _players;
+	private final Set<L2PcInstance> _players = ConcurrentHashMap.newKeySet();
 	// Event Task
 	ScheduledFuture<?> _eventTask = null;
 	// Event state
@@ -120,6 +119,7 @@ public final class Race extends Event
 		{
 			return false;
 		}
+		
 		// Check Custom Table - we use custom NPC's
 		if (!Config.CUSTOM_NPC_DATA)
 		{
@@ -127,9 +127,7 @@ public final class Race extends Event
 			eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
 			return false;
 		}
-		// Initialize list
-		_npclist = new ArrayList<>();
-		_players = new CopyOnWriteArrayList<>();
+		
 		// Set Event active
 		_isactive = true;
 		// Spawn Manager
@@ -167,7 +165,7 @@ public final class Race extends Event
 		// Transform players and send message
 		for (L2PcInstance player : _players)
 		{
-			if ((player != null) && player.isOnline())
+			if (player.isOnline())
 			{
 				if (player.isInsideRadius(_npc, 500, false, false))
 				{
@@ -209,22 +207,19 @@ public final class Race extends Event
 		// Teleport to event start point
 		for (L2PcInstance player : _players)
 		{
-			if ((player != null) && player.isOnline())
+			if (player.isOnline())
 			{
 				player.untransform();
 				player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
 			}
 		}
+		_players.clear();
 		// Despawn NPCs
-		for (L2Npc _npc : _npclist)
+		for (L2Npc _npc : _npcs)
 		{
-			if (_npc != null)
-			{
-				_npc.deleteMe();
-			}
+			_npc.deleteMe();
 		}
-		_npclist.clear();
-		_players.clear();
+		_npcs.clear();
 		// Announce event end
 		Broadcast.toAllOnlinePlayers("* Race Event finished *");
 		
@@ -355,10 +350,7 @@ public final class Race extends Event
 	private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
 	{
 		final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
-		if (npc != null)
-		{
-			_npclist.add(npc);
-		}
+		_npcs.add(npc);
 		return npc;
 	}
 	
diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00421_LittleWingsBigAdventure/Q00421_LittleWingsBigAdventure.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00421_LittleWingsBigAdventure/Q00421_LittleWingsBigAdventure.java
index df7cb0832cffd1eb002143020d84a033d9a9c9ca..91dfdfc649b055d4c7e2ce7d3d73a59e9fc5c3c6 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00421_LittleWingsBigAdventure/Q00421_LittleWingsBigAdventure.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00421_LittleWingsBigAdventure/Q00421_LittleWingsBigAdventure.java
@@ -89,6 +89,15 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
+		if ("DESPAWN_GUARDIAN".equals(event))
+		{
+			if (npc != null)
+			{
+				npc.deleteMe();
+			}
+			return super.onAdvEvent(event, npc, player);
+		}
+		
 		final QuestState qs = getQuestState(player, false);
 		String htmltext = null;
 		if (qs == null)
@@ -172,14 +181,6 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
 				htmltext = event;
 				break;
 			}
-			case "DESPAWN_GUARDIAN":
-			{
-				if (npc != null)
-				{
-					npc.deleteMe();
-				}
-				break;
-			}
 		}
 		return htmltext;
 	}
diff --git a/L2J_DataPack/dist/sql/game/characters.sql b/L2J_DataPack/dist/sql/game/characters.sql
index 86ab28d199fe867dd14745ab8fcad04dec6c6eaf..f84c9c6cb48c701f75652ffafc6a9ed5752e9de0 100644
--- a/L2J_DataPack/dist/sql/game/characters.sql
+++ b/L2J_DataPack/dist/sql/game/characters.sql
@@ -53,7 +53,7 @@ CREATE TABLE IF NOT EXISTS `characters` (
   `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
   `vitality_points` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
-  `createDate` date NOT NULL DEFAULT '0000-00-00',
+  `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `language` VARCHAR(2) DEFAULT NULL,
   PRIMARY KEY (`charId`),
   KEY `account_name` (`account_name`),
diff --git a/L2J_DataPack/dist/sql/game/updates/20150705update.sql b/L2J_DataPack/dist/sql/game/updates/20150705update.sql
new file mode 100644
index 0000000000000000000000000000000000000000..b8a6825f92e2113c53ddd4ae588af4aad74142a2
--- /dev/null
+++ b/L2J_DataPack/dist/sql/game/updates/20150705update.sql
@@ -0,0 +1 @@
+ALTER TABLE `characters` CHANGE COLUMN `createDate` `createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `vitality_points`;
\ No newline at end of file