diff --git a/sufst-controller/ecuCan.cpp b/sufst-controller/ecuCan.cpp
index 65e3bd34ec26523e467947275bd7e77150819135..ab764d420ef7dc02834d4e358e6a29993629d5e8 100644
--- a/sufst-controller/ecuCan.cpp
+++ b/sufst-controller/ecuCan.cpp
@@ -77,7 +77,7 @@ void ecuCanMsg0x2000(CanMsgTemplate *canMsg)
 //    ecuOpenloggerSave(canMsg, 1);
 //    ecuOpenloggerSave(canMsg, 2);
 
-  dashEcuSetRpm(tpsPerc);
+  dashEcuSetRpm(rpm);
   dashEcuSetWaterTemp(waterTempC);
 }
 
diff --git a/sufst-dash/sufst-dash.ino b/sufst-dash/sufst-dash.ino
index c562714f111f9a9f6d2dc613c6b50a896835d981..43dbc6240cab02950b0f350b4fdf0a560d266b2e 100644
--- a/sufst-dash/sufst-dash.ino
+++ b/sufst-dash/sufst-dash.ino
@@ -20,12 +20,12 @@
 
 #define DASH_SERIAL_START_BYTE 0x55
 
-#define DASH_RPM_THRESHOLD_1 30
-#define DASH_RPM_THRESHOLD_2 40
-#define DASH_RPM_THRESHOLD_3 50
-#define DASH_RPM_THRESHOLD_4 60
-#define DASH_RPM_THRESHOLD_5 70
-#define DASH_RPM_THRESHOLD_SHIFT 80
+#define DASH_RPM_THRESHOLD_1 7000
+#define DASH_RPM_THRESHOLD_2 9000
+#define DASH_RPM_THRESHOLD_3 11000
+#define DASH_RPM_THRESHOLD_4 12000
+#define DASH_RPM_THRESHOLD_5 13000
+#define DASH_RPM_THRESHOLD_SHIFT 13500
 
 #define DASH_WATER_C_THRESHOLD 100
  
@@ -34,12 +34,14 @@ void dashRpmLedsProcess();
 
 bool gShiftFlashState = true;
 
-struct DashSerialFrame {
-  uint8_t startByte;
-  uint16_t waterTemp;
-  uint16_t rpm;
-  // uint8_t crc; 
-} __attribute__((packed));
+enum DashSerialState {
+  checkStart = 0,
+  checkRpm,
+  checkWaterTemp,
+  startError
+};
+
+DashSerialState dashSerialState = checkStart;
 
 uint16_t gDashRpm = 0;
 uint16_t gDashWaterTemp = 0;
@@ -252,14 +254,36 @@ void dashWaterLedProcess()
 
 void serialProcess()
 { 
-  DashSerialFrame dashSerialFrame;
+ 
+  while(Serial.available() > 0) {
+    switch (dashSerialState) {
+      case checkStart: case startError:
+        if (Serial.read() == DASH_SERIAL_START_BYTE) {
+          dashSerialState = checkWaterTemp;
+        }
+        else {
+          dashSerialState = startError;
+        }
+
+        break;
+
+      case checkWaterTemp:
+
+        Serial.readBytes((uint8_t *)(&gDashWaterTemp), 2);
+
+        dashSerialState = checkRpm;
+
+        Serial.println(gDashWaterTemp);
+        
+        break;
+
+      case checkRpm:
 
-  if (Serial.available() >= sizeof(DashSerialFrame)) {
-    Serial.readBytes((uint8_t *)(&dashSerialFrame), sizeof(DashSerialFrame));
+        Serial.readBytes((uint8_t *)(&gDashRpm), 2);
+        
+        dashSerialState = checkStart;
 
-    if (dashSerialFrame.startByte == DASH_SERIAL_START_BYTE) {
-      gDashRpm = dashSerialFrame.rpm;
-      gDashWaterTemp = dashSerialFrame.waterTemp;
+        break;
     }
   }
 }