 
   // sleep for a bit to save power. This is OK b/c timer0 which provides
   // millis is not disabled
-  Xadow.goToSleep(SLEEP_MODE_IDLE, 100);
+  Xadow.goToSleep(SLEEP_MODE_PWR_DOWN, 200);
 
   power_spi_enable();
-  uint8_t changes = watch_tick(millis());
-  if (changes) {
-    watch_show(changes);
-    //status_show();
-    // log voltage every minute
-    if (changes >= 2 && logbat) {
-      if (eeaddr < 1024) {
-        uint8_t batvol = Xadow.getBatVol()*10;
-        EEPROM[eeaddr] = batvol;
-        eeaddr += 1;
-      }
+  uint8_t changes = watch_tick(now);
+
+  Screen nextscreen = currentScreen;
+
+  if (digitalRead(10) == LOW) {
+    nextscreen = SCREEN_STATUS;
+  } else {
+    nextscreen = SCREEN_WATCH;
+  }
+
+  if (nextscreen != currentScreen) {
+    oled.fillScreen(COLOR_BLACK);
+    currentScreen = nextscreen;
+  }
+
+  switch(nextscreen) {
+    case SCREEN_STATUS:
+      status_show();
+      delay(1000);
+      break;
+
+    case SCREEN_WATCH:
+      watch_show(changes);
+      break; 
+  }
+
+  if (changes >= 2 && logbat) {
+    if (eeaddr < 1024) {
+      uint8_t batvol = Xadow.getBatVol()*10;
+      EEPROM[eeaddr] = batvol;
+      eeaddr += 1;
     }
   }
+
+  uint16_t t = millis();
+  now += millis() - checkpoint + 200;
+  checkpoint = t;
 }

  power_timer1_disable();
  power_timer2_disable();
  power_timer3_disable();
}

void loop() {

uint8_t logbat = 0;
uint16_t eeaddr = 1;

uint16_t now = 0;
uint16_t checkpoint;


typedef enum {
  SCREEN_WATCH,
  SCREEN_STATUS,
} Screen;

Screen currentScreen;

void setup() {
  pinMode(10, INPUT);

  Xadow.init();
  //Xadow.greenLed(LEDON);

