diff --git a/data_src/index.html b/data_src/index.html
index f0604ebb1a2092ac7759cc709af4f38a30c77e94..2f81ac23bb3be2af264e08d4a612280441a344bf 100644
--- a/data_src/index.html
+++ b/data_src/index.html
@@ -33,26 +33,47 @@
         </h5>
         <div class="card-body text-center">
 
+          <!-- color mode -->
           <div class="row mb-3 px-3">
+            <div class="btn-group" role="group">
+              <input type="radio" class="btn-check btnColorMode" id="btnColorMode_0" data-mode="0" autocomplete="off" disabled>
+              <label class="btn btn-outline-primary" for="btnColorMode_0">Static</label>
+            
+              <input type="radio" class="btn-check btnColorMode" id="btnColorMode_1" data-mode="1" autocomplete="off" disabled>
+              <label class="btn btn-outline-primary" for="btnColorMode_1">Simple</label>
+            
+              <input type="radio" class="btn-check btnColorMode" id="btnColorMode_2" data-mode="2" autocomplete="off" disabled>
+              <label class="btn btn-outline-primary" for="btnColorMode_2">Dynamic</label>
+            </div>
+          </div>
+          <!-- // color mode -->
+
+          <div class="row mb-2 px-3">
             <div id="colorpicker" class="d-flex justify-content-center"></div>
           </div>
-          <div class="row mb-3 px-3">
+          <div class="row mb-2 px-3">
+            <label for="rangeDecay" class="col-form-label">Cell Aging</label>
+            <input type="range" class="form-range rangeSetting" id="rangeDecay" data-name="colorDecay" min="1"
+              max="100" steps="1" disabled>
+          </div>
+          <div class="row mb-2 px-3">
             <label for="rangeBrightness" class="col-form-label">Brightness</label>
             <input type="range" class="form-range rangeSetting" id="rangeBrightness" data-name="brightness" min="1"
               max="100" steps="1" disabled>
           </div>
-          <div class="row mb-3 px-3">
+          <div class="row mb-2 px-3">
             <label for="rangeSpeed" class="col-form-label">Speed</label>
             <input type="range" class="form-range rangeSetting" id="rangeSpeed" data-name="interval" min="1" max="100"
               steps="10" disabled>
           </div>
-          <div class="row mb-3 px-3 mt-5">
+          <div class="row px-3 mt-4">
             <button type="button" class="btn btn-primary btnAction" data-action="addGlider" disabled>Add
               Glider</button>
           </div>
 
         </div>
 
+        <!-- card footer -->
         <div class="card-footer text-body-secondary py-3">
           <div class="row">
             <div class="col-6">
@@ -67,6 +88,7 @@
             </div>
           </div>
         </div>
+        <!-- // card footer -->
 
       </div>
 
diff --git a/data_src/main.js b/data_src/main.js
index bd9fae2aa9813289885b3a43dfe864111be08d2c..3cec1f32694aaa50c97b5e0bcf99152fb7f8035c 100644
--- a/data_src/main.js
+++ b/data_src/main.js
@@ -3,6 +3,8 @@ var wsUrl = 'ws://' + document.location.host + '/ws';
 var settings = {
     brightness: 0,
     interval: 0,
+    colorMode: 0,
+    colorDecay: 0,
     color: {
         r: 255,
         g: 255,
@@ -32,6 +34,8 @@ $(document).on('change', '.rangeSetting', function () {
     var setting = $(this).data('name');
     var value = $(this).val();
     switch (setting) {
+        case 'colorDecay':
+            break;
         case 'brightness':
             value = mapRange(value, 1, 100, 8, 255);
             break;
@@ -43,6 +47,13 @@ $(document).on('change', '.rangeSetting', function () {
     sendSettings();
 });
 
+$('.btnColorMode').on('click', function () {
+    $('.btnColorMode').not(this).prop('checked', false);
+    var mode = $(this).data('mode');
+    settings['colorMode'] = mode;
+    sendSettings();
+});
+
 $('.btnAction').on('click', function () {
     var action = $(this).data('action');
     sendAction(action);
@@ -69,12 +80,11 @@ $("#prompt").on('keydown', function (e) {
 function enabledUI(enable) {
     if (enable) {
         $('#spinner').addClass('invisible');
-        $('.btnAction, .btnConfirm, .rangeSetting').prop('disabled', false);
+        $('.btnColorMode, .btnAction, .btnConfirm, .rangeSetting').prop('disabled', false);
         uiEnabled = true;
     } else {
         $('#spinner').removeClass('invisible');
-        $('.btnAction, .btnConfirm, .rangeSetting').prop('disabled', true);
-        $('.rangeSetting').prop('disabled', true);
+        $('.btnColorMode, .btnAction, .btnConfirm, .rangeSetting').prop('disabled', true);
         uiEnabled = false;
     }
 }
@@ -150,8 +160,13 @@ function sendAction(action) {
 function loadSettings(data) {
     settings.brightness = data.brightness;
     settings.interval = data.interval;
+    settings.colorMode = data.colorMode;
+    settings.colorDecay = data.colorDecay;
     colorPicker.color.rgb = data.color;
     enabledUI(true);
+    $('.btnColorMode').prop('checked', false);
+    $('#btnColorMode_'+settings.colorMode).prop('checked', true);
+    $('#rangeDecay').val(data.colorDecay);
     $('#rangeBrightness').val(mapRange(data.brightness, 8, 255, 1, 100));
     $('#rangeSpeed').val(mapRange(data.interval, 1000, 10, 1, 100));
     sendAction('getHighscores');
diff --git a/src/display.cpp b/src/display.cpp
index df29ca1151c3cc7f89057e1f01f6ee5434ef28ef..c89e5a89b283d92c03284ed16db5e5bcb9cbff1e 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -18,9 +18,6 @@ rgb24 gameColor = {colorR, colorG, colorB};
 rgb24 textColor = {255, 255, 255};
 rgb24 pixelColor = {255, 255, 255};
 
-int colorMode = 2; // 0 = static, 1 = simple RGB, 2 = dynamic aging (decay)
-int colorDecay = 5;
-
 SMARTMATRIX_ALLOCATE_BUFFERS(matrix, kMatrixWidth, kMatrixHeight, kRefreshDepth, kDmaBufferRows, kPanelType, kMatrixOptions);
 SMARTMATRIX_ALLOCATE_BACKGROUND_LAYER(backgroundLayer, kMatrixWidth, kMatrixHeight, COLOR_DEPTH, kBackgroundLayerOptions);
 SMARTMATRIX_ALLOCATE_INDEXED_LAYER(indexedLayer, kMatrixWidth, kMatrixHeight, COLOR_DEPTH, kIndexedLayerOptions);
diff --git a/src/display.h b/src/display.h
index 793cf83f80420fa34c363a1840f3f946c3b19b92..727b240e4304bc9cde7b6da279ac950ec3e0166f 100644
--- a/src/display.h
+++ b/src/display.h
@@ -8,6 +8,8 @@
 extern bool runGame;
 extern int defaultBrightness;
 extern int gameEra;
+extern int colorMode;
+extern int colorDecay;
 extern uint8_t colorR;
 extern uint8_t colorG;
 extern uint8_t colorB;
diff --git a/src/main.cpp b/src/main.cpp
index 5dcbb6582d31a4b7590b47563130a7975bd854c8..a757a57e54fe35185bbb58e27207686de3e524a4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -7,6 +7,8 @@
 
 int defaultBrightness;
 int gameInterval;
+int colorMode;
+int colorDecay;
 uint8_t colorR;
 uint8_t colorG;
 uint8_t colorB;
diff --git a/src/network.cpp b/src/network.cpp
index 5f78cd8bf8edd2edf9b0fa27805854785ca1e9e3..cc9e0ce30e21b0542a4400d839f0855661a4de12 100644
--- a/src/network.cpp
+++ b/src/network.cpp
@@ -266,6 +266,8 @@ void updateSettings(StaticJsonDocument<200U> doc)
 {
   gameInterval = doc["settings"]["interval"];
   defaultBrightness = doc["settings"]["brightness"];
+  colorMode = doc["settings"]["colorMode"];
+  colorDecay = doc["settings"]["colorDecay"];
   colorR = doc["settings"]["color"]["r"];
   colorG = doc["settings"]["color"]["g"],
   colorB = doc["settings"]["color"]["b"];
@@ -279,6 +281,8 @@ void sendSettings()
   JsonObject settings = doc.createNestedObject("settings");
   settings["brightness"] = defaultBrightness;
   settings["interval"] = gameInterval;
+  settings["colorMode"] = colorMode;
+  settings["colorDecay"] = colorDecay;
   JsonObject color = settings.createNestedObject("color");
   color["r"] = colorR;
   color["g"] = colorG;
diff --git a/src/settings.cpp b/src/settings.cpp
index 697212fbab3dcd6e8bcd4db9e5658fc12f9d4d6e..27b0f6eff99a0ad0a9b97299df4410895cba8dcf 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -8,6 +8,8 @@ void loadSettings() {
   preferences.begin("settings", true); // true = readonly
   defaultBrightness = preferences.getUInt("brightness", 50);
   gameInterval = preferences.getUInt("interval", 100);
+  colorMode = preferences.getUInt("color_mode", 0); // 0 = static, 1 = simple RGB, 2 = dynamic aging (decay)
+  colorDecay = preferences.getUInt("color_decay", 5);
   colorR = preferences.getUInt("color_r", 255);
   colorG = preferences.getUInt("color_g", 255);
   colorB = preferences.getUInt("color_b", 255);
@@ -20,6 +22,8 @@ void saveSettings() {
   preferences.begin("settings", false);
   preferences.putUInt("brightness", defaultBrightness);
   preferences.putUInt("interval", gameInterval);
+  preferences.putUInt("color_mode", colorMode);
+  preferences.putUInt("color_decay", colorDecay);
   preferences.putUInt("color_r", colorR);
   preferences.putUInt("color_g", colorG);
   preferences.putUInt("color_b", colorB);