diff --git a/src/display.cpp b/src/display.cpp
index 4366bd3f50412b85bea64314458958d94dd2f0d2..8280b497e20b753485ad4b8b3baefa0fd0022449 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -29,7 +29,7 @@ void setupDisplay()
   matrix.addLayer(&indexedLayer);
   matrix.begin();
   matrix.setBrightness(defaultBrightness);
-  backgroundLayer.setBrightness(defaultBrightness);
+  backgroundLayer.setBrightness(255);
   backgroundLayer.enableColorCorrection(true);
 }
 
@@ -48,19 +48,15 @@ void displayLoop()
   }
 }
 
-void showEndScreen(int ticks)
-{
-  showEvolutions(ticks);
-}
-
-void gameBrightness(int brightness)
+void showMessage(char* msg)
 {
-  logLine("Game Brightness: " + (String)brightness);
-  //brightness = lightPowerMap8bit[brightness];
-  backgroundLayer.setBrightness(brightness);
+  indexedLayer.setFont(font3x5);
+  indexedLayer.fillScreen(0);
+  indexedLayer.drawString((matrix.getScreenWidth() / 2) - (strlen(msg) * 4) / 2, (matrix.getScreenHeight() / 2) - 3, 1, msg);
+  indexedLayer.swapBuffers();
 }
 
-void showEvolutions(int ticks)
+void showEndScreen(int ticks)
 {
   char msg_game[15];
   sprintf(msg_game, "Game %d ended", gameEra);
@@ -72,11 +68,18 @@ void showEvolutions(int ticks)
   indexedLayer.swapBuffers();
 }
 
+void gameBrightness(int brightness)
+{
+  logLine("Game Brightness: " + (String)brightness);
+  //brightness = lightPowerMap8bit[brightness];
+  backgroundLayer.setBrightness(brightness);
+}
+
 void clearDisplay()
 {
   indexedLayer.fillScreen(0);
   indexedLayer.swapBuffers();
   backgroundLayer.fillScreen({0, 0, 0});
-  backgroundLayer.setBrightness(defaultBrightness);
-  backgroundLayer.swapBuffers(false);
+  backgroundLayer.setBrightness(255);
+  backgroundLayer.swapBuffers();
 }
diff --git a/src/display.h b/src/display.h
index 7b21029aa5f831ae95b89fee42ea6c9ce65461d7..e550e2171e544f69c7213ee01475dd98ad14f3e4 100644
--- a/src/display.h
+++ b/src/display.h
@@ -12,8 +12,8 @@ extern int gameEra;
 void setupDisplay();
 void displayLoop();
 void showEndScreen(int ticks);
+void showMessage(char* msg);
 void gameBrightness(int brightness);
-void showEvolutions(int ticks);
 void clearDisplay();
 
 #endif
diff --git a/src/gameoflife.cpp b/src/gameoflife.cpp
index 8860606b70766166182f1af9a0e752ceccb4f752..4ba030909bd27e8e2f4aab9e0f2a21d3293a24e5 100644
--- a/src/gameoflife.cpp
+++ b/src/gameoflife.cpp
@@ -36,7 +36,6 @@ void setupGameOfLife()
   {
     addGlider(random(SCREEN_HEIGHT), random(SCREEN_WIDTH), g);
   }
-  logLine("Initialized Game " + gameEra);
 }
 
 void createRandomMatrix(int (&a)[SCREEN_HEIGHT][SCREEN_WIDTH])
@@ -123,7 +122,7 @@ void gameLoop()
   if (gameOver)
   {
 
-    int brightness = floor(defaultBrightness * (1 - ((float)(millis() - currentMillis) / (float)scoreScreenTimeout)));
+    int brightness = constrain(floor(255 * (1 - ((float)(millis() - currentMillis) / (float)scoreScreenTimeout * 2))), 0, 255);
     gameBrightness(brightness);
 
     if (millis() - currentMillis > scoreScreenTimeout)
@@ -136,7 +135,7 @@ void gameLoop()
 
     if (currentTick % 2)
     {
-      char msg[66];
+      char msg[80];
       sprintf(msg, "Tick: %4d, Cells now: %4d, before: %4d - No evolution since: %3d", currentTick, cellsAliveNow, cellsAliveBefore, noEvolutionTicks);
       logLine(msg);
       cellsAliveBefore = cellsAliveNow;
@@ -158,7 +157,6 @@ void gameLoop()
       currentMillis = millis();
       showEndScreen(finalTicks);
       gameOver = true;
-      logLine("Ending Game: " + gameEra);
     }
   }
 }
diff --git a/src/main.cpp b/src/main.cpp
index 659579e1a06e464e3df296be9349c253e039521e..eb08576101a2e71b6376293ae276ebe630ffc720 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,18 +6,25 @@
 #include "gameoflife.h"
 
 int noEvolutionTicksLimit = 100;
-int brightnessPercent = 30;
+int brightnessPercent = 20;
 int gameInterval = 50;
 
 TickTwo gameTimer(gameLoop, gameInterval);
 TickTwo displayTimer(displayLoop, gameInterval);
 
+String titleMsg = "Game of Life";
+
 void setup()
 {
   Serial.begin(115200);
   logLine("", true);
   setupNetwork();
   setupDisplay();
+  char msg[13];
+  titleMsg.toCharArray(msg, 13);
+  showMessage(msg);
+  delay(3000);
+  clearDisplay();
   setupGameOfLife();
   gameTimer.start();
   displayTimer.start();
diff --git a/src/network.cpp b/src/network.cpp
index 02d57e10c240f39d96b9b00130c9ccb2b75fbe63..f8717ef5fba5eae4ac41bc72752ef94620563dc0 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -3,6 +3,7 @@
 #include "config.h"
 #include "utils.h"
 #include "network.h"
+#include "display.h"
 
 MDNSResponder mdns;
 AsyncWebServer server(80);
@@ -53,23 +54,29 @@ void setupOTA()
   ArduinoOTA.onStart([]()
                      {
                       runGame = false; 
-                      logLine("Update Start"); });
+                      logLine("Update Start");
+                      clearDisplay(); });
   ArduinoOTA.onEnd([]()
                    {
                     runGame = true; 
-                    logLine("Update End"); });
+                    logLine("Update End");
+                    clearDisplay(); });
   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
                         {
     char p[32];
     sprintf(p, "Progress: %u%%\n", (progress/(total/100)));
-    logLine(p); });
+    logLine(p);
+    char msg[10];
+    sprintf(msg, "OTA:%3d%%", (progress/(total/100)));
+    showMessage(msg); });
   ArduinoOTA.onError([](ota_error_t error)
                      {
     if(error == OTA_AUTH_ERROR) logLine("OTA Auth Failed");
     else if(error == OTA_BEGIN_ERROR) logLine("OTA Begin Failed");
     else if(error == OTA_CONNECT_ERROR) logLine("OTA Connect Failed");
     else if(error == OTA_RECEIVE_ERROR) logLine("OTA Receive Failed");
-    else if(error == OTA_END_ERROR) logLine("OTA End Failed"); 
+    else if(error == OTA_END_ERROR) logLine("OTA End Failed");
+    clearDisplay();
     runGame = true; });
   ArduinoOTA.setHostname(HOSTNAME);
   ArduinoOTA.begin();