diff --git a/source/game/EntityManager.cpp b/source/game/EntityManager.cpp
index a82c879464e48d3e9304701b4e8454632a06c399..7075321213822d2510c056703d53f226be6184ad 100644
--- a/source/game/EntityManager.cpp
+++ b/source/game/EntityManager.cpp
@@ -272,14 +272,19 @@ void CEntityManager::unreg(ID ent)
 		to = &m_vOutputTimeout[i];
 		if(to->status == TS_WAIT)
 		{
-			to->status = TS_DONE;
+			int iRemoved = 0;
 			for(int j = 0; j < to->pOutput->iOutCount; ++j)
 			{
 				if(to->pOutput->pOutputs[j].pTarget == pEnt)
 				{
 					to->pOutput->pOutputs[j].pTarget = NULL;
+					++iRemoved;
 				}
 			}
+			if(iRemoved == to->pOutput->iOutCount)
+			{
+				to->status = TS_DONE;
+			}
 		}
 	}
 
diff --git a/source/light/LightSystem.cpp b/source/light/LightSystem.cpp
index 4e3a3d8385859b29ac5381fae25cabd43413e33f..080b91df75f2223b2db8fb24356231882e6b8ba6 100644
--- a/source/light/LightSystem.cpp
+++ b/source/light/LightSystem.cpp
@@ -584,9 +584,14 @@ void XMETHODCALLTYPE CLightSystem::updateVisibility()
 
 	for(UINT i = 0, l = m_aLights.size(); i < l; ++i)
 	{
-		if(m_aLights[i]->isEnabled() && m_aLights[i]->isDirty(LRT_ALL))
+		if(m_aLights[i]->isEnabled())
 		{
-			m_aLights[i]->updateVisibility(m_pMainCamera, vLPVmin, vLPVmax, iCascades > 0);
+			m_aLights[i]->testDirty();
+
+			if(m_aLights[i]->isDirty(LRT_ALL))
+			{
+				m_aLights[i]->updateVisibility(m_pMainCamera, vLPVmin, vLPVmax, iCascades > 0);
+			}
 		}
 	}
 }
diff --git a/source/light/ShadowCache.cpp b/source/light/ShadowCache.cpp
index 0b70bd0d40ae457dca811dee19703e10d35f4ca2..c6264bbe403b34c217020010b302052459424402 100644
--- a/source/light/ShadowCache.cpp
+++ b/source/light/ShadowCache.cpp
@@ -230,13 +230,11 @@ void CShadowCache::nextFrame()
 
 void CShadowCache::addLight(CXLight *pLight)
 {
-	pLight->testDirty();
 	m_aFrameLights.push_back(pLight);
 }
 
 void CShadowCache::addRSMLight(CXLight *pLight)
 {
-	pLight->testDirty();
 	m_aFrameRSMLights.push_back(pLight);
 }