diff --git a/platypus/platypus.ino b/platypus/platypus.ino
index aa4cb7b05f330871ccdf0c7ce081429989e6f59e..120b0c9797dd55951b7c3a3f7642856dceecad19 100644
--- a/platypus/platypus.ino
+++ b/platypus/platypus.ino
@@ -13,15 +13,34 @@
 #define MODE_STROBE             7
 #define MODE_DAZZLE             8
 
+// State
+byte mode;
+hexbright hb;
+char fade_direction = -1;
+
+/***
+ *
+ * Edit these 4 parameters for your own brightness levels,
+ * which level to use first and wether to increase or
+ * decrease from that level to the next
+ *
+ ***/
 
 #define BRIGHTNESS_COUNT 5
 int brightness[BRIGHTNESS_COUNT] = {10, 250, 500, 750, 1000};
 int current_brightness = 0;
 int increase_brightness = 1;
 
-// State
-byte mode;
-hexbright hb;
+/***
+ *
+ * Define the time (in milliseconds) for switching between
+ * static/non-static mode and until switching off
+ *
+ ***/
+
+int HOLD_SHORT = 500;
+int HOLD_LONG = 2000;
+
 
 void setup()
 {
@@ -35,15 +54,6 @@ void loop()
   hb.update();
   hb.print_charge(GLED);
 
-  //if(mode == MODE_DYNAMIC_PREVIEW || mode == MODE_BLINKING) {
-  if(mode == MODE_BLINKING) {
-    static int i = 0;
-    i = (i+1)%40;
-    if(i==0) {
-      hb.set_light(MAX_LEVEL, 0, 50);
-    }
-  }
-  
   boolean button_just_released = hb.button_just_released();
   boolean button_pressed = hb.button_pressed();
   int button_pressed_time = hb.button_pressed_time();
@@ -52,52 +62,84 @@ void loop()
   
   switch (mode) {
     case MODE_OFF_PREVIEW:
-      if(button_just_released) {
+      if (button_just_released) {
         newMode = MODE_OFF;
       }
       break;
     case MODE_OFF:
-      if (button_pressed && button_pressed_time > 500) {
+      if (button_pressed && button_pressed_time > HOLD_SHORT) {
         newMode = MODE_DYNAMIC_PREVIEW;        
       } else if (button_pressed) {
         newMode = MODE_STATIC_PREVIEW;
       }
       break;
     case MODE_STATIC_PREVIEW:
-      if (button_pressed && button_pressed_time > 2000) {
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
         newMode = MODE_OFF_PREVIEW;
-      } else if(button_just_released) {
+      } else if (button_just_released) {
         newMode = MODE_STATIC;
       }
       break;
     case MODE_STATIC:
-      if (button_pressed && button_pressed_time > 2000) {
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
         newMode = MODE_OFF_PREVIEW;
-      } else if (button_pressed && button_pressed_time > 500) {
+      } else if (button_pressed && button_pressed_time > HOLD_SHORT) {
         newMode = MODE_DYNAMIC_PREVIEW;
       } else if (button_just_released) {
         cycleBrightness();
       }
       break;
     case MODE_DYNAMIC_PREVIEW:
-      if (button_pressed && button_pressed_time > 2000) {
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
         newMode = MODE_OFF_PREVIEW;
-      } else if(button_just_released) {
+      } else if (button_just_released) {
+          /***
+           *
+           * Edit this for the first non-static mode to use
+           *
+           ***/
           //newMode = MODE_FADE;
           newMode = MODE_BLINKING;
           //newMode = MODE_STROBE;
           //newMode = MODE_DAZZLE;
       }
       break;
-    case MODE_BLINKING:
-      if (button_pressed && button_pressed_time > 2000) {
+    case MODE_FADE:
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
         newMode = MODE_OFF_PREVIEW;
-      } else if (button_pressed && button_pressed_time > 500) {
+      } else if (button_pressed && button_pressed_time > HOLD_SHORT) {
         newMode = MODE_STATIC_PREVIEW;
-      } else if(button_just_released) {
+      } else if (button_just_released) {
         newMode = MODE_BLINKING;
       }
       break;
+    case MODE_BLINKING:
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if (button_pressed && button_pressed_time > HOLD_SHORT) {
+        newMode = MODE_STATIC_PREVIEW;
+      } else if (button_just_released) {
+        newMode = MODE_STROBE;
+      }
+      break;
+    case MODE_STROBE:
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if (button_pressed && button_pressed_time > HOLD_SHORT) {
+        newMode = MODE_STATIC_PREVIEW;
+      } else if (button_just_released) {
+        newMode = MODE_DAZZLE;
+      }
+      break;
+    case MODE_DAZZLE:
+      if (button_pressed && button_pressed_time > HOLD_LONG) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if (button_pressed && button_pressed_time > HOLD_SHORT) {
+        newMode = MODE_STATIC_PREVIEW;
+      } else if (button_just_released) {
+        newMode = MODE_FADE;
+      }
+      break;
   }
 
   // Do the mode transitions
@@ -124,13 +166,66 @@ void loop()
       case MODE_DYNAMIC_PREVIEW:
         Serial.println("Mode = dynamic_preview");
         break;
+      case MODE_FADE:
+        Serial.println("Mode = fade");
+        break;
       case MODE_BLINKING:
         Serial.println("Mode = blinking");
         break;
+      case MODE_STROBE:
+        Serial.println("Mode = strobe");
+        break;
+      case MODE_DAZZLE:
+        Serial.println("Mode = dazzle");
+        break;
     }
     mode = newMode;
   }
-
+  
+  /***
+   *
+   * Change the conditional check of the non-static mode
+   * you have set as your first to already use it while
+   * the button is still pressed (>500 to <2000 ms)
+   *
+   ***/
+  
+  //if (mode == MODE_DYNAMIC_PREVIEW || mode == MODE_BLINKING) {
+  if (mode == MODE_BLINKING) {
+    static int i = 0;
+    i = (i+1)%40;
+    if(i==0) {
+      hb.set_light(MAX_LEVEL, 0, 50);
+    }
+  }
+  
+  //if (mode == MODE_DYNAMIC_PREVIEW || mode == MODE_STROBE) {
+  if (mode == MODE_STROBE) {
+    static unsigned long flash_time = millis();
+    if(flash_time+70<millis()) {
+      flash_time = millis();
+      hb.set_light(MAX_LEVEL, 0, 20);
+    }
+  }
+  
+  //if (mode == MODE_DYNAMIC_PREVIEW || mode == MODE_DAZZLE) {
+  if (mode == MODE_DAZZLE) {
+    hb.set_light(0, (random(4)<1)*1000, NOW);
+  }
+  
+  //if (mode == MODE_DYNAMIC_PREVIEW || mode == MODE_FADE) {
+  if (mode == MODE_FADE) {
+    if (!hb.light_change_remaining()) {
+      if (fade_direction<0) {
+        hb.set_light(CURRENT_LEVEL, 1000, 1000-(hb.get_light_level()));
+        fade_direction = 1;
+      } else {
+        hb.set_light(CURRENT_LEVEL, 1, hb.get_light_level());
+        fade_direction = -1;
+      }
+    }
+  }
+  
 }
 
 void cycleBrightness() {