 }
 
 #define UPDATE_TIME 20
-#define WALKER_TIMESTEP 100
+#define WALKER_TIMESTEP 25
 uint16_t step_period = 1;
 uint8_t leds_index = 0;
 uint8_t colour_counter=0; //keep track of the remaining colours in led (100-leds_left)
 uint8_t step_counter=0; //keep track of the remaining steps of the currently-moving colour
 
-const CRGB moving_colours[] = {CRGB::Red, CRGB::Green, CRGB::Blue};
-
-void seed_walker(uint8_t start=0){
-  //restart the walker
-  step_period = 1;
-  leds_index = min(start,NUM_LEDS-1);
-  colour_counter = 0;
-  step_counter = 0;
-  // Initialise the white leds
-  for(uint8_t i_led=0; i_led != NUM_LEDS; ++i_led){
-    walker_leds[i_led] = (i_led>=start) ? CRGB::White : CRGB::Black;
-    walker_leds[i_led]/= 2;
-  }
-}
-
-void step_led(){
-  // First, turn off completely the led at step_counter (the light will leave this spot)
-  walker_leds[step_counter] = CRGB::Black;
-  // Re-set the step period 'countdown timer'
-  step_period = 1000/(1+leds_index);
-  
-  // Then, check whether we still have steps left on the current led
-  if(step_counter==0){
-    // the current moving led has left the grid -> find a new led to move out
-    if(colour_counter==0){
-      // it was the last led for this starting position: find a new starting position
-      leds_index++;
-      colour_counter = 3; //3 colours to move out
-      // TODO: leds_index = 100 -> what to do?
-    }
-    colour_counter--;
-    step_counter = leds_index;
-    // Pause 1 step before moving out this new led
-    return;
-  }
-  
-  if(step_counter==leds_index){
-    // Turn off the current colour in the current 'source' led
-    if(colour_counter==2){
-      // moved out blue
-      walker_leds[leds_index] = CRGB::Yellow;
-    } else if(colour_counter==1) {
-      // moved out green as well
-      walker_leds[leds_index] = CRGB::Red;
-    } else if(colour_counter==0){
-      walker_leds[leds_index] = CRGB::Black;
-    }
-  }
-  
-  step_counter--;
-  // Light up the properly-coloured led in the current position
-  walker_leds[step_counter] = moving_colours[colour_counter];
-}
-
+const CRGB moving_colours[] = {CRGB::Blue, CRGB::Green, CRGB::Red};
 
 #define TOTAL_SECONDS ((uint16_t)(90*60))
 #define SECONDS_PER_LED ((uint16_t)TOTAL_SECONDS/NUM_LEDS)
 #define SECONDS_PER_COLOUR ((uint16_t) SECONDS_PER_LED/3)
-
-void draw_walker(uint16_t s){
+#define DECASECONDS_PER_LED (10*SECONDS_PER_LED)
+#define DECASECONDS_PER_COLOUR (10*SECONDS_PER_COLOUR)
+
+void draw_walker(uint16_t decasecs){
   // Draw the complete walker for the current amount of seconds left
   
   // 1: determine the led that is currently 'walking out'
   //    Since each led should take equal time to walk out, this is simply 100*s/T
-  uint8_t current_led = 100-(s / SECONDS_PER_LED);
+  uint8_t current_led = 100-(decasecs / DECASECONDS_PER_LED);
   // 2: determine which of the three colours is moving out
-  uint8_t secs_in_led = SECONDS_PER_LED-s%SECONDS_PER_LED;
-  uint8_t current_colour = ((uint16_t) secs_in_led * 3) / SECONDS_PER_LED;
+  uint8_t decasecs_in_led = DECASECONDS_PER_LED - decasecs % DECASECONDS_PER_LED;
+  uint8_t current_colour = ((uint16_t) decasecs_in_led * 3) / DECASECONDS_PER_LED;
   // 3: determine the position of the current colour
-  uint8_t current_pos = current_led-1 - ((secs_in_led % SECONDS_PER_COLOUR) * current_led) / SECONDS_PER_COLOUR;
+  uint8_t current_pos = current_led-1 - ((decasecs_in_led % DECASECONDS_PER_COLOUR) * current_led) / DECASECONDS_PER_COLOUR;
   
   // The following happens at the very end of the last led
   if(current_colour==3){

  
  LEDS.show();
  Serial.begin(57600);
  
  seed_walker(1);
}


uint16_t seconds_left = TOTAL_SECONDS;


unsigned long prevStepTime = 0;

    // TODO: default case?
  }
  // Finally, the walking led
  walker_leds[current_pos] = moving_colours[current_colour];
  
  Serial << "s: " << decasecs << "; led: " << current_led << "; c: " << current_colour << "; p: " << current_pos << endl;
}

void update(){
