Index: /trunk/src/arcemu-world/Object.cpp
===================================================================
--- /trunk/src/arcemu-world/Object.cpp (revision 3138)
+++ /trunk/src/arcemu-world/Object.cpp (revision 3150)
@@ -3241,4 +3241,7 @@
 	{
 	case TYPEID_UNIT:
+		// check iterator
+		if(mgr->creature_iterator != mgr->activeCreatures.end() && (*mgr->creature_iterator) == TO_CREATURE(this))
+			++mgr->creature_iterator;
 		mgr->activeCreatures.erase((Creature*)this);
 		break;
Index: /trunk/src/arcemu-world/MapMgr.h
===================================================================
--- /trunk/src/arcemu-world/MapMgr.h (revision 3131)
+++ /trunk/src/arcemu-world/MapMgr.h (revision 3150)
@@ -122,4 +122,5 @@
 	uint32 m_CreatureHighGuid;
     std::vector< Creature* > CreatureStorage;
+	CreatureSet::iterator creature_iterator;//required by owners despawning creatures and deleting *(++itr)
 	Creature * CreateCreature(uint32 entry, bool isVehicle = false);
 
Index: /trunk/src/arcemu-world/MapMgr.cpp
===================================================================
--- /trunk/src/arcemu-world/MapMgr.cpp (revision 3149)
+++ /trunk/src/arcemu-world/MapMgr.cpp (revision 3150)
@@ -1494,15 +1494,13 @@
 	// Update creatures.
 	{
-		CreatureSet creatures(activeCreatures);
-		CreatureSet::iterator itr = creatures.begin();
+		creature_iterator = activeCreatures.begin();
 		Creature * ptr;
 		Pet * ptr2;
 
-		for(; itr != creatures.end();)
-		{
-			ptr = *itr;
-			++itr;
-			if( activeCreatures.find(ptr) != activeCreatures.end())//required by owners despawning creatures and deleting *(++itr)
-				ptr->Update(difftime);
+		for(; creature_iterator != activeCreatures.end();)
+		{
+			ptr = *creature_iterator;
+			++creature_iterator;
+			ptr->Update(difftime);
 		}
 
