diff --git a/indra/newview/llvisualeffect.cpp b/indra/newview/llvisualeffect.cpp
index af68a5741360138001127e503e6f7f21d0a7aa80..efa0cbf2b111177105e9826a819a69ac3f9c5899 100644
--- a/indra/newview/llvisualeffect.cpp
+++ b/indra/newview/llvisualeffect.cpp
@@ -114,11 +114,12 @@ void LLVfxManager::runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams)
 
 	auto itEffect = boost::make_filter_iterator(pred, m_Effects.begin(), m_Effects.end()),
 	     endEffect = boost::make_filter_iterator(pred, m_Effects.end(), m_Effects.end());
-	for (; itEffect != endEffect; ++itEffect)
+	while (itEffect != endEffect)
 	{
+		LLVisualEffect* pEffect = *itEffect;
 		if (pParams)
-			pParams->step(itEffect == endEffect);
-		(*itEffect)->run(pParams);
+			pParams->step(++itEffect == endEffect);
+		pEffect->run(pParams);
 	}
 }
 
diff --git a/indra/newview/llvisualeffect.h b/indra/newview/llvisualeffect.h
index 6419e26b297016a159207b1e83f39c3acd4fe486..69387d49af895fe6971acdc1410b78e116cf0e8f 100644
--- a/indra/newview/llvisualeffect.h
+++ b/indra/newview/llvisualeffect.h
@@ -163,6 +163,7 @@ class LLVfxManager : public LLSingleton<LLVfxManager>
 	template<typename T> T* getEffect(const LLUUID& idEffect) const { return dynamic_cast<T*>(getEffect(idEffect)); }
 	LLVisualEffect* getEffect(EVisualEffect eCode) const;
 	template<typename T> T* getEffect(EVisualEffect eCode) const { return dynamic_cast<T*>(getEffect(eCode)); }
+	bool            hasEffect(EVisualEffect eCode) const         { return getEffect(eCode); }
 	bool            removeEffect(const LLUUID& idEffect);
 	void            runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams = nullptr);
 	void            runEffect(EVisualEffectType eType, LLVisualEffectParams* pParams = nullptr);