 
     //right column of labels
     lcd.setCursor(11, 0);
-    lcd.print(idleGauges[4]->shortLabel);
+    lcd.print(octoModeGauges[0][4]->shortLabel);
     lcd.setCursor(11, 1);
-    lcd.print(idleGauges[5]->shortLabel);
+    lcd.print(octoModeGauges[0][5]->shortLabel);
     lcd.setCursor(11, 2);
-    lcd.print(idleGauges[6]->shortLabel);
+    lcd.print(octoModeGauges[0][6]->shortLabel);
     lcd.setCursor(11, 3);
-    lcd.print(idleGauges[7]->shortLabel);
-
-    idleModeReady = true;
-}
-
-void draw_idle_gauges() {
-
-  if(!idleModeReady) {
-    start_idle_mode();
+    lcd.print(octoModeGauges[0][7]->shortLabel);
+
+    octoModeReady = true;
   }
   
   lcd.setCursor(4, 0);
-  lcd.print(idleGauges[0]->currentValue, idleGauges[0]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[1]->currentValue, idleGauges[1]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[2]->currentValue, idleGauges[2]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[3]->currentValue, idleGauges[3]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[4]->currentValue, idleGauges[4]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[5]->currentValue, idleGauges[5]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[6]->currentValue, idleGauges[6]->decimalPlaces);
+  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);
-  lcd.print(idleGauges[7]->currentValue, idleGauges[7]->decimalPlaces);
+  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() {

  if(currentMillis - lastMillis >= interval) {
    lastMillis = currentMillis;
    if(engine_rpm.currentValue < 2000) {
      draw_idle_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();

    //left column of labels
    lcd.setCursor(0, 0);
    lcd.print(idleGauges[0]->shortLabel);
    lcd.setCursor(0, 1);
    lcd.print(idleGauges[1]->shortLabel);
    lcd.setCursor(0, 2);
    lcd.print(idleGauges[2]->shortLabel);
    lcd.setCursor(0, 3);
    lcd.print(idleGauges[3]->shortLabel);

    //draw dividing line
    lcd.setCursor(9, 0);

unsigned long lastMillis = 0;
unsigned long currentMillis = 0;

const int SPI_CS_PIN = 10;

EngineVariable* dualModeGauges[2][2];
EngineVariable* quadModeGauges[1][4];
EngineVariable* octoModeGauges[1][8];

bool dualModeReady = false;
bool quadModeReady = false;
bool octoModeReady = false;

bool dualModeIndex = 0;
bool quadModeIndex = 0;
bool octoModeIndex = 0;

MCP_CAN CAN(SPI_CS_PIN); 

