diff --git a/src/game/combat/CombatEngine.cpp b/src/game/combat/CombatEngine.cpp
index 555b765594d4596279bee764a68543877b66fbd9..bc992ea2c92f88e7aea46aa8006a2583bf3eb81b 100644
--- a/src/game/combat/CombatEngine.cpp
+++ b/src/game/combat/CombatEngine.cpp
@@ -12,6 +12,10 @@
 #include <memory>
 #include <unordered_map>
 
+/**
+ * @authors Lorenz Diel
+ */
+
 namespace advanced_wars
 {
 
@@ -202,6 +206,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
@@ -210,6 +217,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 3c95704b0f6585f33b73bec2b166656bfb9ce077..ec6749218701c27633eb164b33b5f66b8f73c795 100644
--- a/src/game/effect/Effect.cpp
+++ b/src/game/effect/Effect.cpp
@@ -26,18 +26,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;
 
@@ -48,8 +48,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;
 }