        break;
   }
 
+  if (W.needs_redraw) toclear = 8;
+
   uint8_t clearwidth = RGB_OLED_WIDTH*toclear/8;
-  oled.clearWindow(RGB_OLED_WIDTH-clearwidth, ypos, RGB_OLED_WIDTH, FONT_Y*2);
+  xpos = RGB_OLED_WIDTH - clearwidth;
+  oled.clearWindow(xpos, ypos, xpos+clearwidth, ypos + FONT_Y*2);
 
-  sprintf(_sbuf, "%02d:%02d:%02d", hours, minutes, seconds);
-  oled.drawString(_sbuf, xpos, ypos, FONT_SIZE*2, WATCH_COLOR);
+  sprintf(_sbuf, "%02d:%02d:%02d", W.hours, W.minutes, W.seconds);
+  oled.drawString(_sbuf, 0, ypos, FONT_SIZE*2, WATCH_COLOR);
+
+  if (changes > 3 || W.needs_redraw) {
+    ypos += LINE_HEIGHT*2;
+
+    oled.clearWindow(0, ypos, RGB_OLED_WIDTH, ypos+FONT_Y);
+
+    sprintf(_sbuf, "%04d/%02d/%02d", W.year, W.month, W.day);
+    xpos = RGB_OLED_WIDTH - (8*FONT_X);
+    xpos /= 2;
+    oled.drawString(_sbuf, xpos, ypos, FONT_SIZE, WATCH_COLOR);
+  }
+
+  W.needs_redraw = 0;
+#undef W
 }
 
 /**

#define WATCH_COLOR        (COLOR_BLUE)

typedef struct {
  uint16_t next_second_millis;
  uint8_t seconds;
  uint8_t minutes;
  uint8_t hours;
  uint8_t month;
  uint8_t day;
} Watch_t;

uint8_t _watch_days_per_month[] = {


Watch_t Watch = {0};

void watch_init(millis_t now) {
  Watch.next_second_millis = now;
  Watch.needs_redraw = 1;
}

/**
