diff --git a/source/SkyXEngine.h b/source/SkyXEngine.h
index 4615c45d04e43a0af47d981bcd6981ef477d4e61..f0ce3c3ed761ea62f1f05b37b40e2d228c6f027c 100644
--- a/source/SkyXEngine.h
+++ b/source/SkyXEngine.h
@@ -292,7 +292,7 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот
 #ifndef __SKYXENGINE_H
 #define __SKYXENGINE_H
 
-#define SKYXENGINE_VERSION "X.9.0-dev"
+#define SKYXENGINE_VERSION "X.9.1-dev"
 
 #define SKYXENGINE_VERSION4EDITORS "SkyXEngine version " ## SKYXENGINE_VERSION
 
diff --git a/source/game/Editable.cpp b/source/game/Editable.cpp
index 6448c8172fbfaef1be17e54f6d0d5c28f614462f..b64fb2d14a3a09d801214efd7d7293dad4664679 100644
--- a/source/game/Editable.cpp
+++ b/source/game/Editable.cpp
@@ -63,7 +63,7 @@ UINT CEditable::getObjectCount()
 	}
 	return(uResult);
 }
-IXEditorObject *CEditable::getObject(UINT id)
+IXEditorObject* CEditable::getObject(UINT id)
 {
 	UINT uResult = 0;
 	CBaseEntity *pEnt;
@@ -73,7 +73,9 @@ IXEditorObject *CEditable::getObject(UINT id)
 		{
 			if(uResult == id)
 			{
-				return(new CEditorObject(this, pEnt));
+				CEditorObject *pObj = new CEditorObject(this, pEnt);
+				m_aObjects.push_back(pObj);
+				return(pObj);
 			}
 			++uResult;
 		}
@@ -81,7 +83,26 @@ IXEditorObject *CEditable::getObject(UINT id)
 	
 	return(NULL);
 }
-IXEditorObject *CEditable::newObject(const char *szClassName)
+IXEditorObject* CEditable::newObject(const char *szClassName)
 {
-	return(new CEditorObject(this, szClassName));
+	CEditorObject *pObj = new CEditorObject(this, szClassName);
+	m_aObjects.push_back(pObj);
+	return(pObj);
+}
+
+void CEditable::removeObject(CEditorObject *pObject)
+{
+	int idx = m_aObjects.indexOf(pObject);
+	if(idx >= 0)
+	{
+		m_aObjects.erase(idx);
+	}
+}
+
+void CEditable::resync()
+{
+	for(UINT i = 0, l = m_aObjects.size(); i < l; ++i)
+	{
+		m_aObjects[i]->resync();
+	}
 }
diff --git a/source/game/Editable.h b/source/game/Editable.h
index 2df3b94c1ad3b9f90f9c5cf4437591c2c91dc833..8af5ed88d282fff5d4317dff0aceb12d2994adf9 100644
--- a/source/game/Editable.h
+++ b/source/game/Editable.h
@@ -6,7 +6,7 @@
 #include <xcommon/IXCore.h>
 #include "GameData.h"
 
-class CEditable: public IXUnknownImplementation<IXEditable>
+class CEditable final: public IXUnknownImplementation<IXEditable>
 {
 	friend class CEditorObject;
 
@@ -36,6 +36,8 @@ public:
 
 	void startup(IGXDevice *pDevice) override;
 	void shutdown() override;
+	
+	void resync();
 
 protected:
 	IGXDevice *m_pDevice = NULL;
@@ -47,6 +49,10 @@ protected:
 	IXTexture *m_pWhiteTexture = NULL;
 
 	const char **m_pszClassList = NULL;
+
+	Array<CEditorObject*> m_aObjects;
+
+	void removeObject(CEditorObject *pObject);
 };
 
 #endif
diff --git a/source/game/EditorObject.cpp b/source/game/EditorObject.cpp
index 11199d63772dae787d2bb8c5efda1fe6a5422c9a..0d2f3054ce551ded0ff46c3cb14f6cffcea35d24 100644
--- a/source/game/EditorObject.cpp
+++ b/source/game/EditorObject.cpp
@@ -7,7 +7,8 @@
 
 CEditorObject::CEditorObject(CEditable *pEditable, CBaseEntity *pEntity):
 	m_pEditable(pEditable),
-	m_pEntity(pEntity)
+	m_pEntity(pEntity),
+	m_idEnt(pEntity->getId())
 {
 	assert(pEntity);
 
@@ -32,7 +33,7 @@ CEditorObject::CEditorObject(CEditable *pEditable, const char *szClassName):
 
 CEditorObject::~CEditorObject()
 {
-	
+	m_pEditable->removeObject(this);
 }
 
 void CEditorObject::_iniFieldList()
@@ -205,6 +206,7 @@ void CEditorObject::remove()
 	}
 	REMOVE_ENTITY(m_pEntity);
 	m_pEntity = NULL;
+	m_idEnt = -1;
 }
 void CEditorObject::preSetup()
 {
@@ -219,6 +221,8 @@ void CEditorObject::create()
 	assert(!m_pEntity);
 	m_pEntity = CREATE_ENTITY(m_szClassName, GameData::m_pMgr);
 
+	m_idEnt = m_pEntity->getId();
+
 	m_pEntity->setFlags(m_pEntity->getFlags() | EF_LEVEL | EF_EXPORT);
 
 	setPos(getPos());
@@ -226,6 +230,14 @@ void CEditorObject::create()
 	setScale(getScale());
 }
 
+void CEditorObject::resync()
+{
+	if(ID_VALID(m_idEnt))
+	{
+		m_pEntity = GameData::m_pMgr->getById(m_idEnt);
+	}
+}
+
 void CEditorObject::setKV(const char *szKey, const char *szValue)
 {
 	if(m_pEntity)
diff --git a/source/game/EditorObject.h b/source/game/EditorObject.h
index 09f3391934261c57b0793bd10cd31b3a03bedb7c..11580d1de4722ec21a65d3187a5cbfe3e4666beb 100644
--- a/source/game/EditorObject.h
+++ b/source/game/EditorObject.h
@@ -7,7 +7,7 @@
 #include <common/array.h>
 
 class CEditable;
-class CEditorObject: public IXUnknownImplementation<IXEditorObject>
+class CEditorObject final: public IXUnknownImplementation<IXEditorObject>
 {
 	DECLARE_CLASS(CEditorObject, IXEditorObject);
 public:
@@ -15,28 +15,30 @@ public:
 	CEditorObject(CEditable *pEditable, CBaseEntity *pEntity);
 	~CEditorObject();
 
-	void setPos(const float3_t &pos);
-	void setOrient(const SMQuaternion &orient);
-	void setScale(const float3_t &pos);
+	void setPos(const float3_t &pos) override;
+	void setOrient(const SMQuaternion &orient) override;
+	void setScale(const float3_t &pos) override;
 
-	void getBound(float3 *pvMin, float3 *pvMax);
+	void getBound(float3 *pvMin, float3 *pvMax) override;
 
-	void renderSelection(bool is3D);
+	void renderSelection(bool is3D) override;
 
-	bool rayTest(const float3 &vStart, const float3 &vEnd, float3 *pvOut, ID *pidMtrl);
+	bool rayTest(const float3 &vStart, const float3 &vEnd, float3 *pvOut, ID *pidMtrl) override;
 
-	void remove();
-	void create();
-	void preSetup();
-	void postSetup();
+	void remove() override;
+	void create() override;
+	void preSetup() override;
+	void postSetup() override;
 
-	void setKV(const char *szKey, const char *szValue);
-	const char *getKV(const char *szKey);
-	const X_PROP_FIELD *getPropertyMeta(UINT uKey);
-	UINT getProperyCount();
+	void resync();
 
-	const char *getTypeName();
-	const char *getClassName();
+	void setKV(const char *szKey, const char *szValue) override;
+	const char *getKV(const char *szKey) override;
+	const X_PROP_FIELD *getPropertyMeta(UINT uKey) override;
+	UINT getProperyCount() override;
+
+	const char *getTypeName() override;
+	const char *getClassName() override;
 
 protected:
 	CBaseEntity *m_pEntity = NULL;
@@ -48,8 +50,9 @@ protected:
 	AssotiativeArray<String, String> m_msPropCache;
 	const char *m_aszFlags[16];
 
-
 	void _iniFieldList();
+
+	ID m_idEnt = -1;
 };
 
 #endif
diff --git a/source/game/GameStates.cpp b/source/game/GameStates.cpp
index a91c98c4289737c694d099ad36d10459f31d9d5b..993ab09c5f6ce6bc192a699b14e59b3ed16fc6b9 100644
--- a/source/game/GameStates.cpp
+++ b/source/game/GameStates.cpp
@@ -6,6 +6,9 @@
 #include <score/sxscore.h>
 #include <input/sxinput.h>
 
+#include "Editable.h"
+
+extern CEditable *g_pEditable;
 
 CMainMenuGameState::CMainMenuGameState()
 {
@@ -155,6 +158,11 @@ void CIngameGameState::deactivate()
 	if(*dev_reset_world_on_run)
 	{
 		GameData::m_pMgr->dispatchBaseline(m_pBaseLine);
+
+		if(g_pEditable)
+		{
+			g_pEditable->resync();
+		}
 	}
 }