   bulbs[ind] |= 1 << bit;
 }
 
-bool bulbUnset(byte bulbs[], const int bulb) {
+void unSetBulb(byte bulbs[], const int bulb) {
+  GETBIT;
+  GETIND;
+  bulbs[ind] &= ~(1 << bit);
+}
+
+bool bulbIsUnset(byte bulbs[], const int bulb) {
   GETBIT;
   GETIND;
   return (bulbs[ind] & (1 << bit)) == 0;
+}
+
+bool bulbIsSet(byte bulbs[], const int bulb) {
+  GETBIT;
+  GETIND;
+  return (bulbs[ind] & (1 << bit)) > 0;
 }
 
 int countBits(byte bulbs[]) {


      // Set the bulb on second string
      bulb = random(LIGHT_COUNT);
      if ( bulbUnset(bulbs2, bulb) ) {
        setBulb(bulbs2, bulb);
        lights2.set_color(bulb, G35::MAX_INTENSITY, COLOURS[colour]);
        delay(BETWEEN_BULBS);


void loop() {
  #ifdef TWO_STRINGS
    // Randomly switch on to current colour
    while ( countBits(bulbs1) < LIGHT_COUNT ||
            countBits(bulbs2) < LIGHT_COUNT ) {

      // Set the bulb on first string
      int bulb = random(LIGHT_COUNT);
      if ( bulbIsUnset(bulbs1, bulb) ) {
        setBulb(bulbs1, bulb);
        lights1.set_color(bulb, G35::MAX_INTENSITY, COLOURS[colour]);
        delay(BETWEEN_BULBS);
