diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp
index 6290109b20..73d6d9cf39 100644
--- a/apps/openmw/mwmechanics/actors.cpp
+++ b/apps/openmw/mwmechanics/actors.cpp
@@ -732,11 +732,19 @@ namespace MWMechanics
             }
         }
 
-        UpdateSummonedCreatures updateSummonedCreatures(ptr);
-        creatureStats.getActiveSpells().visitEffectSources(updateSummonedCreatures);
-        if (ptr.getClass().hasInventoryStore(ptr))
-            ptr.getClass().getInventoryStore(ptr).visitEffectSources(updateSummonedCreatures);
-        updateSummonedCreatures.process();
+        bool hasSummonEffect = false;
+        for (MagicEffects::Collection::const_iterator it = effects.begin(); it != effects.end(); ++it)
+            if (it->first.mId >= ESM::MagicEffect::SummonScamp && it->first.mId <= ESM::MagicEffect::SummonStormAtronach)
+                hasSummonEffect = true;
+
+        if (!creatureStats.getSummonedCreatureMap().empty() || !creatureStats.getSummonedCreatureGraveyard().empty() || hasSummonEffect)
+        {
+            UpdateSummonedCreatures updateSummonedCreatures(ptr);
+            creatureStats.getActiveSpells().visitEffectSources(updateSummonedCreatures);
+            if (ptr.getClass().hasInventoryStore(ptr))
+                ptr.getClass().getInventoryStore(ptr).visitEffectSources(updateSummonedCreatures);
+            updateSummonedCreatures.process();
+        }
     }
 
     void Actors::calculateNpcStatModifiers (const MWWorld::Ptr& ptr, float duration)