 				break;
 			}
 			
-			++x;
-		}
-	}
-	
+		} while (x != warning_type);
+		
+		if (warning == 0) {	// no warning
+			warning_type = 0;		// cancel
+		}
+		
+		next_warn_check = millis() + 2000;
+	}
+
 	if (blinker)
-		osd.printf(warning_string[0]);
+		osd.printf(warning_string[warning_type]);
 	else
-		osd.printf(warning_string[warning_type]);
+		osd.printf(warning_string[0]);	// let's blink
 	
 	osd.closePanel();
 }

// Staus  : done

void panWarn(int first_col, int first_line){
const char* warning_string[] = {
  "              ",    // clear
  "  no GPS fix  ",    // 
  "     Stall    ",    // 

  "No communicat."  
};

static long next_warn_check = 0;

	osd.setPanel(first_col, first_line);
	osd.openPanel();

	if (millis() > next_warn_check) {	// every 2 seconds
		uint8_t x = warning_type;		// start with next we have to rotate all warns
		
		warning = 0;						// if we are lucky
		
		do {			// full cycle done
			++x;
			
			switch (x) {
			case 0:		break;			// skip
			case 1:		if (osd_fix_type < 2) warning = 1;
