   tft.setCursor(centre_text(c.weather, tft.width()/2, 1), 34);
   tft.print(c.weather);
   bmp_draw(tft, c.icon, tft.width()/2 - 25, 42);
-  char buf[32];
-  strftime(buf, sizeof(buf), metric? "%H:%S": "%I:%S%p", localtime(&c.epoch));
-  tft.setCursor(centre_text(buf, tft.width()/2, 1), 109);
-  tft.print(buf);
-  strftime(buf, sizeof(buf), "%a %d", localtime(&c.epoch));
-  tft.setCursor(centre_text(buf, tft.width()/2, 1), 118);
-  tft.print(buf);
-
-  // http://www.iquilezles.org/www/articles/sincos/sincos.htm
-  int rad = tft.width()/3, cx = tft.width()/2, cy = 68;
-  const float a = 0.999847695, b = 0.017452406;
-  // wind dir is azimuthal angle with N at 0
-  float sin = 1.0, cos = 0.0;
-  for (uint16_t i = 0; i < c.wind_degrees; i++) {
-    const float ns = a*sin + b*cos;
-    const float nc = a*cos - b*sin;
-    cos = nc;
-    sin = ns;
-  }
-  // wind dir rotates clockwise so compensate
-  int ex = cx-rad*cos, ey = cy-rad*sin;
-  tft.fillCircle(ex, ey, 3, BLACK);
-  tft.drawLine(ex, ey, ex+c.wind*(cx-ex)/50, ey+c.wind*(cy-ey)/50, BLACK);
+
+  display_time(c.epoch);
+
+  display_wind(c.wind_degrees, c.wind);
 }
 
 void display_astronomy(struct Conditions &c) {

struct Forecast {

  time_t epoch;
  int temp_high;
  int temp_low;
  int max_wind;
  int ave_wind;
  char wind_dir[8];
  int ave_humidity;
  char conditions[32];
  char icon[16];

  strcpy(buf, "moon");
  strcat(buf, c.age_of_moon);
  bmp_draw(tft, buf, tft.width()/2 - 25, 42);

  tft.setCursor(centre_text(c.moon_phase, tft.width()/2, 1), 92);
  tft.print(c.moon_phase);

  display_time(c.epoch);
}

void display_forecast(struct Forecast &f) {

  tft.fillScreen(WHITE);
  tft.setTextColor(BLACK);

  display_wind_speed(f.ave_wind, f.wind_dir, conditions.wind_unit);

  display_temperature(f.temp_high, f.temp_low, conditions.temp_unit);

  display_humidity(f.ave_humidity);

  tft.setTextSize(2);
  tft.setCursor(right(3, tft.width(), 2), 1);
  tft.print(f.day);

  tft.setTextSize(1);
  tft.setCursor(centre_text(f.conditions, tft.width()/2, 1), 34);
  tft.print(f.conditions);
  bmp_draw(tft, f.icon, tft.width()/2 - 25, 42);

  display_time(f.epoch);

  display_wind(f.wind_degrees, f.ave_wind);
}

void update_display(int screen) {
