diff --git a/kmk/firmware.py b/kmk/firmware.py
index 568feca..6ec2311 100644
--- a/kmk/firmware.py
+++ b/kmk/firmware.py
@@ -289,6 +289,7 @@ class Firmware:
         if self.rgb_pixel_pin:
             self.pixels = rgb.RGB(self.rgb_config, self.rgb_pixel_pin)
             self.rgb_config = None  # No longer needed
+            self.pixels.loopcounter = 0
         else:
             self.pixels = None
 
@@ -351,7 +352,10 @@ class Firmware:
                     self._send_hid()
 
             if self.pixels and self.pixels.enabled and self.pixels.animation_mode:
-                self.pixels = self.pixels.animate()
+                self.pixels.loopcounter +=1
+                if self.pixels.loopcounter >= 7:
+                    self.pixels = self.pixels.animate()
+                    self.pixels.loopcounter = 0
 
             if self.led and self.led.enabled and self.led.animation_mode:
                 self.led = self.led.animate()
diff --git a/kmk/rgb.py b/kmk/rgb.py
index b6afbb1..d227a6f 100644
--- a/kmk/rgb.py
+++ b/kmk/rgb.py
@@ -432,33 +432,30 @@ class RGB:
         return self
 
     def effect_breathing_rainbow(self):
-        if self._animation_step():
-            self.increase_hue(self.animation_speed)
+        self.increase_hue(self.animation_speed)
         self.effect_breathing()
 
         return self
 
     def effect_rainbow(self):
-        if self._animation_step():
-            self.increase_hue(self.animation_speed)
-            self.set_hsv_fill(self.hue, self.sat, self.val)
+        self.increase_hue(self.animation_speed)
+        self.set_hsv_fill(self.hue, self.sat, self.val)
 
         return self
 
     def effect_swirl(self):
-        if self._animation_step():
-            self.increase_hue(self.animation_speed)
-            self.disable_auto_write = True  # Turn off instantly showing
-            for i in range(0, self.num_pixels):
-                self.set_hsv(
-                    (self.hue - (i * self.num_pixels)) % 360,
-                    self.sat,
-                    self.val,
-                    i)
+        self.increase_hue(self.animation_speed * 2)
+        self.disable_auto_write = True  # Turn off instantly showing
+        for i in range(0, self.num_pixels):
+            self.set_hsv(
+                (self.hue - (i * self.num_pixels)) % 360,
+                self.sat,
+                self.val,
+                i)
 
-            # Show final results
-            self.disable_auto_write = False  # Resume showing changes
-            self.show()
+        # Show final results
+        self.disable_auto_write = False  # Resume showing changes
+        self.show()
         return self
 
     def effect_knight(self):
@@ -476,9 +473,9 @@ class RGB:
             self.reverse_animation = not self.reverse_animation
 
         if self.reverse_animation:
-            self.pos -= self.animation_speed / 5
+            self.pos -= self.animation_speed / 2
         else:
-            self.pos += self.animation_speed / 5
+            self.pos += self.animation_speed / 2
 
         # Show final results
         self.disable_auto_write = False  # Resume showing changes