     ledStatus = !ledStatus;
     digitalWrite(LED_PIN, ledStatus);
 
-    // dispatch the requests to the rim
-    if( inst.light[I_RED].red > 0 ) addCycle(RED_X, ALL_Y, Red);
-    if( inst.light[I_GRN].green > 0 ) addCycle(GRN_X, ALL_Y, Grn);
-    if( inst.light[I_BLU].blue > 0 ) addCycle(BLU_X, ALL_Y, Blu);
-    if( inst.light[I_YEL].red > 0 && inst.light[I_YEL].green > 0 ) addCycle(YEL_X, ALL_Y, Yel);
-
+    // dispatch the requests to the rim. number of cycles is proportional to the light level at each button
+    for( int i=0; i< inst.light[I_RED].red / 64; i++ ) addCycle(RED_X, ALL_Y, Red);
+    for( int i=0; i< inst.light[I_GRN].green / 64; i++ ) addCycle(GRN_X, ALL_Y, Grn);
+    for( int i=0; i< inst.light[I_BLU].blue / 64; i++ ) addCycle(BLU_X, ALL_Y, Blu);
+    if( inst.light[I_YEL].red > 64 && inst.light[I_YEL].green > 64 )
+      for( int i=0; i< (int)(inst.light[I_YEL].red+inst.light[I_YEL].green) / 128; i++ ) addCycle(YEL_X, ALL_Y, Yel);
+/*
+    if( inst.light[I_RED].red > 64 ) addCycle(RED_X, ALL_Y, Grn);
+    if( inst.light[I_GRN].green > 64 ) addCycle(GRN_X, ALL_Y, Grn);
+    if( inst.light[I_BLU].blue > 64 ) addCycle(BLU_X, ALL_Y, Blu);
+    if( inst.light[I_YEL].red > 64 && inst.light[I_YEL].green > 64 ) addCycle(YEL_X, ALL_Y, Yel);
+*/
     quietUpdateInterval.reset();
     addCycles.reset();
   }

  byte movePref; // CW or CCW preference
} cycle_t;

#define MAX_CYCLES 20
cycle_t cycles[MAX_CYCLES];

#define CYCLE_DICK_MOVE_PERCENT 15 // chance that a cycle will throw some "zigs" in it's path around the rim


  rimJob.setPixelColor(getPixelN(x,y), color);

  // cycles don't start in exactly the same place; "thereabouts"
  cycles[availableCycle].x = constrain((int)x + random(-5,6), 0, RIM_X);
  cycles[availableCycle].y = constrain((int)y + random(-1,2), 0, RIM_Y);
  cycles[availableCycle].color = color;
  cycles[availableCycle].live = true;

