diff --git a/src/game/combat/CombatEngine.cpp b/src/game/combat/CombatEngine.cpp
index 579b2609004d5878c24358c95b64059c7c156011..37510fd0ef32032769becb271f5c3f60157174bf 100644
--- a/src/game/combat/CombatEngine.cpp
+++ b/src/game/combat/CombatEngine.cpp
@@ -9,7 +9,6 @@
  * @authors Lorenz Diel
  */
 
-
 namespace advanced_wars
 {
 
@@ -200,6 +199,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level)
             // attacking->attack(defending);
             if (attacking->getHealth() <= 0)
             {
+                level.addEffect(Effect(
+                    attacking.get()->getXPosition(), attacking.get()->getYPosition(),
+                    EffectId::LAND_EXPLOSION, false));
                 level.removeUnit(selectedUnit);
             }
             else
@@ -208,6 +210,9 @@ void CombatEngine::handleAttack(std::pair<int, int> tilePos, Level& level)
             }
             if (defending->getHealth() <= 0)
             {
+                level.addEffect(Effect(
+                    defending.get()->getXPosition(), defending.get()->getYPosition(),
+                    EffectId::LAND_EXPLOSION, false));
                 level.removeUnit(targetedUnit);
             }
             level.setSelectedUnit(-1);
diff --git a/src/game/effect/Effect.cpp b/src/game/effect/Effect.cpp
index 1407e94788fdbb1b96687d4be0d6ce5aeb93a889..0727342adda6d72c7ec794f1e044c5e082d597cd 100644
--- a/src/game/effect/Effect.cpp
+++ b/src/game/effect/Effect.cpp
@@ -25,18 +25,18 @@ void Effect::render(Engine& engine, int scale)
         m_start = engine.getStage();
     }
 
-    int step =
-        engine.getStage() % spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second;
+    int step = (engine.getStage() - m_start) %
+               spritesheet->getEffectTextures().at(static_cast<int>(m_id)).second;
 
     SDL_Rect src;
-    src.x = step * spritesheet->getEffectWidth() + step * spritesheet->getEffectHeight();
+    src.x = step * spritesheet->getEffectWidth();
     src.y = 0;
     src.w = spritesheet->getEffectWidth();
     src.h = spritesheet->getEffectHeight();
 
     SDL_Rect dest;
-    dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8;
-    dest.y = (m_y * spritesheet->getTileHeight() * scale) - 8;
+    dest.x = (m_x * spritesheet->getTileWidth() * scale) - 8 * scale;
+    dest.y = (m_y * spritesheet->getTileHeight() * scale) - 16 * scale;
     dest.w = spritesheet->getEffectWidth() * scale;
     dest.h = spritesheet->getEffectHeight() * scale;
 
@@ -47,8 +47,13 @@ void Effect::render(Engine& engine, int scale)
 
 bool Effect::isFinished(Engine& engine)
 {
-    return engine.getStage() - m_start >
-               engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second &&
+    if (m_start == 0)
+    {
+        return false;
+    }
+
+    return (engine.getStage() - m_start >
+            engine.getSpritesheet()->getEffectTextures().at(static_cast<int>(m_id)).second) &&
            !m_repeat;
 }