   updateWingRotation: (speed, dx) ->
     m = if dx > 0 then -1 else 1
     # Range -20 .. 0 .. 25
-    @parts['tfWing'].rotation = @wingRotation(speed, -20, 25) * m
+    @rotatePart('tfWing', speed, -20, 25, m)
+    @rotatePart('tbWing', speed, -20, 25, m)
+    @rotatePart('bfWing', speed, 25, -20, m * -1)
+    @rotatePart('bbWing', speed, 25, -20, m * -1)
+
+  rotatePart: (part, speed, min, max, m) ->
+    target = @wingRotation(speed, min, max) * m
+    target = ((360 + target + 180) % 360)
+    current = (@parts[part].rotation + 180) % 360
+
+    if current > target
+      @parts[part].rotation -= 1
+    else if current < target
+      @parts[part].rotation += 1
 
   wingRotation: (speed, min, max) ->
-    if speed < @speed
-      ((@speed - speed) / @speed) * -20
+    if speed < @defaultSpeed
+      ((@defaultSpeed - speed) / @defaultSpeed) * -20
     else
-      maxSpeed = @speed * 2
-      ((maxSpeed - @speed) / maxSpeed) * 25
+      maxSpeed = @defaultSpeed * 2
+      ((maxSpeed - @defaultSpeed) / maxSpeed) * 25
 
 Game.levelGenerator.defineAssets(
   'newAwesomeSpriteSheet'

  initEnemy: (attr = {}) ->
    @attr _.defaults(attr,
      health: 200
      speed: 100
    )
    @autoAdjustSize()


    else
      @unflipX()

    @updateBladeRotation rotation, dx if rotation?
    @updateWingRotation speed, dx

  updateBladeRotation: (rotation, dx) ->
