diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp
index ee58f156ad3c0e9809ab7654ddfe57699f6e52e1..c7b6c468ebcc556810dda4d235ecd0b050ac9a9c 100644
--- a/source/game/BaseAnimating.cpp
+++ b/source/game/BaseAnimating.cpp
@@ -441,7 +441,7 @@ void CBaseAnimating::setPos(const float3 &pos)
 	BaseClass::setPos(pos);
 	if(m_pRigidBody)
 	{
-		SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody);
+		SPhysics_UpdateSingleAABB(m_pRigidBody);
 	}
 
 	SAFE_CALL(m_pModel, setPosition, pos);
@@ -452,7 +452,7 @@ void CBaseAnimating::setOrient(const SMQuaternion & q)
 	BaseClass::setOrient(q);
 	if(m_pRigidBody)
 	{
-		SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody);
+		SPhysics_UpdateSingleAABB(m_pRigidBody);
 	}
 
 	SAFE_CALL(m_pModel, setOrientation, q);
diff --git a/source/game/BaseAnimating.h b/source/game/BaseAnimating.h
index e5336bcd4de9646f8c99ca3cb9dcd20f331e9b19..43426cd876f9823f227449067ddcddafbb500fdd 100644
--- a/source/game/BaseAnimating.h
+++ b/source/game/BaseAnimating.h
@@ -48,8 +48,7 @@ public:
 	{
 		const btVector3 &v = centerOfMassWorldTrans.getOrigin();
 		const btQuaternion &q = centerOfMassWorldTrans.getRotation();
-		m_pEntity->setPos(BTVEC_F3(v));
-		m_pEntity->setOrient(BTQUAT_Q4(q));
+		m_pEntity->setXform(BTVEC_F3(v), BTQUAT_Q4(q));
 	}
 };
 
diff --git a/source/game/BaseEntity.cpp b/source/game/BaseEntity.cpp
index 18df921c0603dad288073ba305b3ccf39be22221..713dd63d93acf48ac4df6d760c0fac304d94d563 100644
--- a/source/game/BaseEntity.cpp
+++ b/source/game/BaseEntity.cpp
@@ -163,7 +163,7 @@ void CBaseEntity::setPos(const float3 &pos)
 	if(m_pEditorRigidBody)
 	{
 		m_pEditorRigidBody->getWorldTransform().setOrigin(F3_BTVEC(m_vPosition));
-		SPhysics_GetDynWorld()->updateSingleAabb(m_pEditorRigidBody);
+		SPhysics_UpdateSingleAABB(m_pEditorRigidBody);
 	}
 
 	{
diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp
index 3d23d5f18d63ef089cb2eebb4583c096bd1d473e..6577b79b883e3e9a9bb518df6dec51898c12a824 100644
--- a/source/game/BaseTrigger.cpp
+++ b/source/game/BaseTrigger.cpp
@@ -244,7 +244,7 @@ void CBaseTrigger::setPos(const float3 & pos)
 	{
 		m_pGhostObject->getWorldTransform().setOrigin(F3_BTVEC(pos));
 
-		SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject);
+		SPhysics_UpdateSingleAABB(m_pGhostObject);
 	}
 }
 
@@ -255,7 +255,7 @@ void CBaseTrigger::setOrient(const SMQuaternion & q)
 	{
 		m_pGhostObject->getWorldTransform().setRotation(Q4_BTQUAT(q));
 
-		SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject);
+		SPhysics_UpdateSingleAABB(m_pGhostObject);
 	}
 }
 
diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp
index 9e294766d2f2d30338247b1a4dc7d6eee2ef7157..ee554457e62a8ad3f6034f8c85ca06d930d7459a 100644
--- a/source/physics/PhyWorld.cpp
+++ b/source/physics/PhyWorld.cpp
@@ -223,7 +223,10 @@ void CPhyWorld::update(int thread)
 	}
 
 	//printf("%.3fs\n", (float)(time1 - time0) / 1000.0f);
+
+	m_isUpdating = true;
 	m_pDynamicsWorld->stepSimulation((float)(time1 - time0) / 1000.0f, 2, 1.0f / 60.0f);
+	m_isUpdating = false;
 
 	time0 = time1;
 }
@@ -249,6 +252,14 @@ void CPhyWorld::removeShape(btRigidBody * pBody)
 	}
 }
 
+void CPhyWorld::updateSingleAABB(btCollisionObject* colObj)
+{
+	if(!m_isUpdating)
+	{
+		m_pDynamicsWorld->updateSingleAabb(colObj);
+	}
+}
+
 #if 0
 
 void CPhyWorld::loadGeom(const char * file)
diff --git a/source/physics/PhyWorld.h b/source/physics/PhyWorld.h
index 1112d84dc01f6151961b907491d1bbf0b0e00b3e..9752a082f15c53b06657481405b1b964a5c4721f 100644
--- a/source/physics/PhyWorld.h
+++ b/source/physics/PhyWorld.h
@@ -56,6 +56,8 @@ public:
 	void addShape(btRigidBody * pBody, int group, int mask);
 	void removeShape(btRigidBody * pBody);
 
+	void updateSingleAABB(btCollisionObject* colObj);
+
 #if 0
 	void loadGeom(const char * file=NULL);
 	void unloadGeom();
@@ -178,6 +180,8 @@ protected:
 	btDiscreteDynamicsWorldMt * m_pDynamicsWorld;
 	btGhostPairCallback * m_pGHostPairCallback;
 
+	bool m_isUpdating = false;
+
 	const bool * m_bDebugDraw;
 	CDebugDrawer * m_pDebugDrawer;
 
diff --git a/source/physics/sxphysics.h b/source/physics/sxphysics.h
index 5ec58faa5af0da555c015952a28f6a7a153302f3..aa00825fc110900bc639cd5f3d083ab7923aa429 100644
--- a/source/physics/sxphysics.h
+++ b/source/physics/sxphysics.h
@@ -107,6 +107,8 @@ SX_LIB_API ID SPhysics_GetMtlID(const btCollisionObject *pBody, const btCollisio
 
 SX_LIB_API btDiscreteDynamicsWorldMt * SPhysics_GetDynWorld();
 
+SX_LIB_API void SPhysics_UpdateSingleAABB(btCollisionObject* colObj);
+
 /*! Запускает симуляцию
 */
 SX_LIB_API void SPhysics_EnableSimulation();
diff --git a/source/physics/sxphysics_dll.cpp b/source/physics/sxphysics_dll.cpp
index bbce25badb718893c890d1c48c99ab83f42925e7..64c5508e1279e4b94baa4230b12273f51ee69f57 100644
--- a/source/physics/sxphysics_dll.cpp
+++ b/source/physics/sxphysics_dll.cpp
@@ -151,6 +151,12 @@ SX_LIB_API btDiscreteDynamicsWorldMt * SPhysics_GetDynWorld()
 	return(g_pWorld->getBtWorld());
 }
 
+SX_LIB_API void SPhysics_UpdateSingleAABB(btCollisionObject* colObj)
+{
+	SP_PRECOND(_VOID);
+	g_pWorld->updateSingleAABB(colObj);
+}
+
 #if 0
 SX_LIB_API bool SPhysics_ImportGeom(const char * file)
 {
diff --git a/source/xcommon/XEvents.h b/source/xcommon/XEvents.h
index 2a3929d35ceb605a2b64f06474bfbe5ecfe529a3..693df482e4d9f79e39a1bc3eda334dae0b9ad7c0 100644
--- a/source/xcommon/XEvents.h
+++ b/source/xcommon/XEvents.h
@@ -59,11 +59,11 @@ public:
 	}
 	void broadcastEvent(const T *pEvent)
 	{
-		for(UINT i = 0, l = m_vListeners.size(); i < l; ++i)
+		for(UINT i = 0; i < m_vListeners.size(); ++i)
 		{
 			m_vListeners[i](pEvent);
 		}
-		for(UINT i = 0, l = m_vListeners2.size(); i < l; ++i)
+		for(UINT i = 0; i < m_vListeners2.size(); ++i)
 		{
 			m_vListeners2[i]->onEvent(pEvent);
 		}