   if(currentMillis - lastMillis >= interval) {
     lastMillis = currentMillis;
     if(engine_rpm.currentValue < 2000) {
-      draw_idle_gauges();      
+      draw_octo_gauges();
     }
     else {
-      if(idleModeReady) {
-        lcd.clear();
-        idleModeReady = false;
-      }
-      if(engine_rpm.currentValue != engine_rpm.previousValue) {
-        lcd.setCursor(4, 0);
-        if(is_current_value_shorter(engine_rpm)) {
-          lcd.print("     ");
-          lcd.setCursor(4, 0);
-        }
-        lcd.print(engine_rpm.currentValue, engine_rpm.decimalPlaces);
-        draw_bar(engine_rpm, 1);
-      }
-      if(engine_afr.currentValue != engine_afr.previousValue) {
-        lcd.setCursor(4, 2);
-        lcd.print(engine_afr.currentValue);
-        draw_bar(engine_afr, 3);      
-      }      
-    }
-  }
-}
-
-void start_idle_mode() {
-    lcd.clear();
-
+      draw_dual_gauges();
+      
+ 
+    }
+  }
+}
+
+
+void clear_mode() {
+  dualModeReady = false;
+  quadModeReady = false;
+  octoModeReady = false;
+  lcd.clear();
+}
+
+void draw_dual_gauges() {
+  if(!dualModeReady) {
+    clear_mode();
+    lcd.setCursor(0, 0);
+    lcd.print(dualModeGauges[0][0]->shortLabel);
+    lcd.setCursor(0, 2);
+    lcd.print(dualModeGauges[0][1]->shortLabel);
+    dualModeReady = true;
+  }
+  //if(dualModeGauges[0][0]->currentValue != dualModeGauges[0][0]->previousValue) {
+    lcd.setCursor(4, 0);
+    if(is_current_value_shorter(*dualModeGauges[0][0])) {
+      lcd.print("     ");
+      lcd.setCursor(4, 0);
+    }
+    lcd.print(dualModeGauges[0][0]->currentValue, dualModeGauges[0][0]->decimalPlaces);
+    draw_bar(*dualModeGauges[0][0], 1);
+  //}
+  //if(dualModeGauges[0][1]->currentValue != dualModeGauges[0][1]->previousValue) {
+    lcd.setCursor(4, 2);
+    if(is_current_value_shorter(*dualModeGauges[0][1])) {
+      lcd.print("     ");
+      lcd.setCursor(4, 2);
+    }
+    lcd.print(dualModeGauges[0][1]->currentValue, dualModeGauges[0][1]->decimalPlaces);
+    draw_bar(*dualModeGauges[0][1], 3);
+  //}
+}
+
+void draw_quad_gauges() {
+  if(!quadModeReady) {
+    clear_mode();
+    lcd.setCursor(0, 0);
+    lcd.print(quadModeGauges[0][0]->shortLabel);
+    lcd.setCursor(0, 1);
+    lcd.print(quadModeGauges[0][1]->shortLabel);
+    lcd.setCursor(0, 2);
+    lcd.print(quadModeGauges[0][2]->shortLabel);
+    lcd.setCursor(0, 3);
+    lcd.print(quadModeGauges[0][3]->shortLabel);
+    quadModeReady = true;
+  }
+
+  lcd.setCursor(4, 0);
+  if(is_current_value_shorter(*quadModeGauges[0][0])) {
+    lcd.print("     ");
+    lcd.setCursor(4, 0);
+  }
+  lcd.print(quadModeGauges[0][0]->currentValue, quadModeGauges[0][0]->decimalPlaces);
+
+  lcd.setCursor(4, 1);
+  lcd.print(quadModeGauges[0][1]->currentValue, quadModeGauges[0][1]->decimalPlaces);
+
+  lcd.setCursor(4, 2);
+  lcd.print(quadModeGauges[0][2]->currentValue, quadModeGauges[0][2]->decimalPlaces);
+
+  lcd.setCursor(4, 3);
+  lcd.print(quadModeGauges[0][3]->currentValue, quadModeGauges[0][3]->decimalPlaces);
+}
+
+void draw_octo_gauges() {
+
+  if(!octoModeReady) {
+    clear_mode();
     //left column of labels
     lcd.setCursor(0, 0);
-    lcd.print(idleGauges[0]->shortLabel);
+    lcd.print(octoModeGauges[0][0]->shortLabel);
     lcd.setCursor(0, 1);
-    lcd.print(idleGauges[1]->shortLabel);
+    lcd.print(octoModeGauges[0][1]->shortLabel);
     lcd.setCursor(0, 2);
-    lcd.print(idleGauges[2]->shortLabel);
+    lcd.print(octoModeGauges[0][2]->shortLabel);
     lcd.setCursor(0, 3);
-    lcd.print(idleGauges[3]->shortLabel);
+    lcd.print(octoModeGauges[0][3]->shortLabel);
 
     //draw dividing line
     lcd.setCursor(9, 0);

struct EngineVariable
{
  String shortLabel;
  //String longLabel;
  double currentValue;
  double previousValue;
  double minimum;


    //right column of labels
    lcd.setCursor(11, 0);
    lcd.print(octoModeGauges[0][4]->shortLabel);
    lcd.setCursor(11, 1);
    lcd.print(octoModeGauges[0][5]->shortLabel);
    lcd.setCursor(11, 2);
    lcd.print(octoModeGauges[0][6]->shortLabel);
    lcd.setCursor(11, 3);
    lcd.print(octoModeGauges[0][7]->shortLabel);

    octoModeReady = true;
  }
  
  lcd.setCursor(4, 0);
  if(is_current_value_shorter(*octoModeGauges[0][0])) {
    lcd.print("     ");
    lcd.setCursor(4, 0);
  }
  lcd.print(octoModeGauges[0][0]->currentValue, octoModeGauges[0][0]->decimalPlaces);

  lcd.setCursor(4, 1);
  if(is_current_value_shorter(*octoModeGauges[0][1])) {
    lcd.print("     ");
    lcd.setCursor(4, 1);
  }
  lcd.print(octoModeGauges[0][1]->currentValue, octoModeGauges[0][1]->decimalPlaces);

  lcd.setCursor(4, 2);
  if(is_current_value_shorter(*octoModeGauges[0][2])) {
    lcd.print("     ");
    lcd.setCursor(4, 2);
  }
  lcd.print(octoModeGauges[0][2]->currentValue, octoModeGauges[0][2]->decimalPlaces);

  lcd.setCursor(4, 3);
  if(is_current_value_shorter(*octoModeGauges[0][3])) {
    lcd.print("     ");
    lcd.setCursor(4, 3);
  }
  lcd.print(octoModeGauges[0][3]->currentValue, octoModeGauges[0][3]->decimalPlaces);

  lcd.setCursor(15, 0);
  if(is_current_value_shorter(*octoModeGauges[0][4])) {
    lcd.print("     ");
    lcd.setCursor(15, 0);
  }
  lcd.print(octoModeGauges[0][4]->currentValue, octoModeGauges[0][4]->decimalPlaces);

  lcd.setCursor(15, 1);
  if(is_current_value_shorter(*octoModeGauges[0][5])) {
    lcd.print("     ");
    lcd.setCursor(15, 1);
  }
  lcd.print(octoModeGauges[0][5]->currentValue, octoModeGauges[0][5]->decimalPlaces);

  lcd.setCursor(15, 2);
  if(is_current_value_shorter(*octoModeGauges[0][6])) {
    lcd.print("     ");
    lcd.setCursor(15, 2);
  }
  lcd.print(octoModeGauges[0][6]->currentValue, octoModeGauges[0][6]->decimalPlaces);

  lcd.setCursor(15, 3);
  if(is_current_value_shorter(*octoModeGauges[0][7])) {
    lcd.print("     ");
    lcd.setCursor(15, 3);
  }
  lcd.print(octoModeGauges[0][7]->currentValue, octoModeGauges[0][7]->decimalPlaces);
}

void load_from_can() {
