 
 Player *players[2] = { 
   new Player(
-    &buttons[0],
+    new Button(0, handle_button_interrupt_0),
     new Screen(4,5,6)
   ),
   new Player(
-    &buttons[1],
+    new Button(1, handle_button_interrupt_1),
     new Screen(7,8,9)
   )
 };
 
 void handle_button_press(int button) {
   serprintf("button %d pressed\r\n", button);
-  serprintf("before: active_player=%d, button_pressed=%d\r\n", active_player, button_pressed);
-  active_player = (button_pressed + 1) % 2;
+  serprintf("before: active_player=%d, button_pressed=%d\r\n", active_player, Button::button_pressed);
+  active_player = (Button::button_pressed + 1) % 2;
   players[active_player]->clock->last_update_ms = millis();
-  button_pressed = NONE;
-  serprintf("after:  active_player=%d, button_pressed=%d\r\n", active_player, button_pressed);
+  Button::button_pressed = NONE;
+  serprintf("after:  active_player=%d, button_pressed=%d\r\n", active_player, Button::button_pressed);
 }
 
 void setup(void) {



int active_player = NONE;
volatile int button_pressed = NONE;

inline void handle_button_interrupt(int button) {
  button_pressed = button;
}

void handle_button_interrupt_0() {

    if (players[active_player]->out_of_time()) {
      serprintf("Flag fell for player %d\r\n", active_player);
      active_player = NONE;
      Button::button_pressed = NONE;
      return;
    }

