diff --git a/source/main.cpp b/source/main.cpp
index 26941b51a5e9f9e3789a91846654ddde4bc267d2..b9bbbb47aab16499238583720fb56e496bfb17c6 100755
--- a/source/main.cpp
+++ b/source/main.cpp
@@ -17,128 +17,23 @@
 
 #include "MicroBit.h"
 
+MicroBit micro_bit;
 
-/**
- * @brief Main class responsible for the game loop and logic
- */
-class Game {
-public:
-    /**
-     * @brief Constructor
-     * @details takes reference to the micro-bit instance for the sake of not
-     * using global variables.
-     */
-    Game(MicroBit& micro_bit);
-
-    /**
-     * @brief Starts a new run of the game
-     * @note method blocks until game over.
-     */
-    void run();
-
-    /* begin event handler methods */
-
-    /**
-     * Handles Button A Press event
-     */
-    void press_button_a(MicroBitEvent e);
-
-    /**
-     * Handles Button B Press event
-     */
-    void press_button_b(MicroBitEvent e);
-
-    /* end event handler methods */
-
-private:
-    /**
-     * @brief Draws whatever's in the screen buffer to display
-     */
-    void draw();
-
-    // reference to our MicroBit instance
-    MicroBit& micro_bit;
-    // internal screen-buffer, which we draw to first before pasting to display
-    MicroBitImage screen_buffer;
-};
-
-Game::Game(MicroBit& micro_bit)
-    : micro_bit(micro_bit)
-    , screen_buffer(5, 5) // our screen buffer mirrors the display dimensions
-{}
-
-void Game::run() {
-    // this->micro_bit.display.scroll("NEW GAME!");
-    // init screen display mode, to be sure it is in a known-state
-    // TODO: consider changing to greyscale to allow "mutli-coloured" blocks
-    // this->micro_bit.display.setDisplayMode(DISPLAY_MODE_BLACK_AND_WHITE);
-    // register event-handlers
-    this->micro_bit.messageBus.listen(
-        MICROBIT_ID_BUTTON_A,
-        MICROBIT_BUTTON_EVT_CLICK,
-        this,
-        &Game::press_button_a
-    );
-    this->micro_bit.messageBus.listen(
-        MICROBIT_ID_BUTTON_B,
-        MICROBIT_BUTTON_EVT_CLICK,
-        this,
-        &Game::press_button_b
-    );
-    while (true) { // TODO: change to use game-over condition
-        // this->draw(); // render screen buffer
-        // sleep to conserve CPU cycles and allow other fibers a chance to run
-        this->micro_bit.sleep(100); // a 100ms sleep gives us a 10Hz tick-rate
-    }
-    // TODO: add the rest of the game logic
-    this->micro_bit.display.scroll("GAME OVER!");
-    // TODO: display final score
-    // TODO: de-register event-handlers
-    this->micro_bit.messageBus.ignore(
-        MICROBIT_ID_BUTTON_A,
-        MICROBIT_BUTTON_EVT_CLICK,
-        this,
-        &Game::press_button_a
-    );
-    this->micro_bit.messageBus.ignore(
-        MICROBIT_ID_BUTTON_B,
-        MICROBIT_BUTTON_EVT_CLICK,
-        this,
-        &Game::press_button_b
-    );
-}
-
-void Game::draw() {
-    // XXX: debug drawing, fill the screen buffer with black
-    this->screen_buffer.clear();
-    // render our screen buffer
-    this->micro_bit.display.image.paste(this->screen_buffer);
-}
-
-void Game::press_button_a(MicroBitEvent e) {
-    // XXX: debug
-    this->micro_bit.display.print("A");
-}
-
-void Game::press_button_b(MicroBitEvent e) {
-    // XXX: debug
-    this->micro_bit.display.print("B");
+void event_handler(MicroBitEvent) {
+    micro_bit.display.printAsync("A", 200);
 }
 
 
-MicroBit micro_bit;
-
 int main() {
     // Initialise the micro:bit runtime.
     micro_bit.init();
 
-    // startup message displays the name of the game
-    micro_bit.display.scroll("BLOCKS!");
+    micro_bit.messageBus.listen(
+        MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, event_handler
+    );
 
-    // infinitely start new games
     while (true) {
-        Game game(micro_bit);
-        game.run();
+        micro_bit.sleep(10); // 10ms sleep, or 100Hz tick rate
     }
 
     // TODO: potentially remove this call, if clarified that it is not required.