     determined based on the number of elements, and only the minimum amount of
     memory to store the full array is allocated.
     */  
-    
-  // Static (not the keyword) UI elements + UI associated with setting up Modes
-  const char titleStr[] PROGMEM      = "  Dremel Centrifuge";
-  const char setTimeStr[] PROGMEM    = "Set time: ";
-  const char setSpeedStr[] PROGMEM   = "Set speed: ---";
-  const char startStr[] PROGMEM      = "   Push to Start!";
-
-  // UI associated with SPINNING mode
-  const char finishedInStr[] PROGMEM = "Finished in: ";
-  const char stopStr[] PROGMEM       = "   Push to Stop! ";
-  const char null_str[] PROGMEM      = "";
+
+  // Enumeration of row indices as UI elements
+  enum line : char {
+
+    Title = 0,
+    Time,
+    Speed,
+    Instructions
+
+  };
 
 } // namespace
 
+// Function Prototypes
+inline void changeUI(PGM_P timeStr, PGM_P instructionStr);
+
 /////////////////////////////////////////////////////////////////////////////////
 
-void setup()
-{  
+void setup() {
+
   lcd.begin(LCD_COLUMNS, LCD_ROWS);
 
   wpb.begin();

  static unsigned long spinningStartTime;               // point in time when countdown starts i.e. when wpb pressed the 2nd time
  static uint8_t motorSpeed;                            // uint8_t == typedef for an unsigned 8-bit integer aka a char aka a byte

  switch(currentModePtr->id) {

    case Mode::ID::SETTING_TIME: {

      // Initialize UI only once per case entry; state of initialization
      // remembered due to functor being holding state and being `static`
      changeUI(currentModePtr);

      // Map time value from potentiometer
      setDuration = map(analogRead(POT_PIN), 0, 1024, 0, 901);

      // Add selector braces: "Set time: <15:00>"
      lcdPrinter.printfval(setDuration, fsecs, ValueDecor::SELECTING,
                             10, line::Time);

      if(wpb.pressed())
      {

        // Overwrite "<>" selector braces
        lcdPrinter.printfval(setDuration, fsecs, ValueDecor::DESELECTING,
                               10, line::Time);

        // Convert mapped time to calculatable millis after printing from seconds
        setDuration *= 1000;                            

        // Change the mode for next loop() call
        currentModePtr = &setSpeedMode;

        // Reset functor state so that another Mode's UI can be initialized once
        changeUI.uninitialize(); 

      } // if(wpb.pressed())


        // Turn off motor
        digitalWrite(MOTOR_PIN, LOW);

        // Change mode for next loop() call
        currentMode = Mode::SETTING_TIME;

        // Initialize the UI for SETTING_TIME Mode (note: only done once, here!)
        changeUI(UI::setTime, UI::pushStart);

      } //if(wpb.pressed())

