diff --git a/panels/base_panel.py b/panels/base_panel.py
index fbe8d2b2..1edc0ad3 100644
--- a/panels/base_panel.py
+++ b/panels/base_panel.py
@@ -21,7 +21,8 @@ class BasePanel(ScreenPanel):
 
         self.buttons_showing = {
             'back': False if back else True,
-            'macros_shortcut': False
+            'macros_shortcut': False,
+            'printer_select': False
         }
 
         self.layout = Gtk.Layout()
@@ -57,7 +58,8 @@ class BasePanel(ScreenPanel):
         self.control['estop'].connect("clicked", self.emergency_stop)
 
         self.locations = {
-            'macro_shortcut': 2
+            'macro_shortcut': 2,
+            'printer_select': 2
         }
         button_range = 3
         if len(self._config.get_printers()) > 1:
@@ -69,9 +71,6 @@ class BasePanel(ScreenPanel):
             self.control['space%s' % i] = Gtk.Label("")
             self.control_grid.attach(self.control['space%s' % i], 0, i, 1, 1)
 
-        if len(self._config.get_printers()) > 1:
-            self.control_grid.remove(self.control_grid.get_child_at(0, 2))
-            self.control_grid.attach(self.control['printer_select'], 0, 2, 1, 1)
         self.control_grid.attach(self.control['estop'], 0, 4, 1, 1)
 
         try:
@@ -117,10 +116,13 @@ class BasePanel(ScreenPanel):
         # Create gtk items here
         return
 
-    def show_heaters(self):
+    def show_heaters(self, show=True):
         for child in self.control['temp_box'].get_children():
             self.control['temp_box'].remove(child)
 
+        if show is False:
+            return
+
         i = 0
         for extruder in self._printer.get_tools():
             self.labels[extruder + '_box'] = Gtk.Box(spacing=0)
@@ -179,9 +181,10 @@ class BasePanel(ScreenPanel):
             return
 
         if self._printer.has_heated_bed():
-            self.labels["heater_bed"].set_label("%02d°" % self._printer.get_dev_stat("heater_bed", "temperature"))
+            self.labels["heater_bed"].set_label(
+                "%02d°" % round(self._printer.get_dev_stat("heater_bed", "temperature")))
         for x in self._printer.get_tools():
-            self.labels[x].set_label("%02d°" % self._printer.get_dev_stat(x, "temperature"))
+            self.labels[x].set_label("%02d°" % round(self._printer.get_dev_stat(x, "temperature")))
 
         if "toolhead" in data and "extruder" in data["toolhead"]:
             if data["toolhead"]["extruder"] != self.current_extruder:
@@ -237,6 +240,23 @@ class BasePanel(ScreenPanel):
             self.buttons_showing['macros_shortcut'] = False
         self._screen.show_all()
 
+    def show_printer_select(self, show=True):
+        if len(self._config.get_printers()) <= 1:
+            return
+
+        if show and self.buttons_showing['printer_select'] is False:
+            logging.info("Turning on printer_select button")
+            self.control_grid.remove(self.control_grid.get_child_at(0, self.locations['printer_select']))
+            self.control_grid.attach(self.control['printer_select'], 0, self.locations['printer_select'], 1, 1)
+            self.buttons_showing['printer_select'] = True
+        elif show is False and self.buttons_showing['printer_select']:
+            logging.info("Turning off printer_select button")
+            self.control_grid.remove(self.control_grid.get_child_at(0, self.locations['printer_select']))
+            self.control_grid.attach(self.control['space%s' % self.locations['printer_select']],
+                                     0, self.locations['printer_select'], 1, 1)
+            self.buttons_showing['printer_select'] = False
+        self._screen.show_all()
+
     def set_title(self, title):
         try:
             env = Environment(extensions=["jinja2.ext.i18n"])
diff --git a/screen.py b/screen.py
index 81950d45..af89119f 100644
--- a/screen.py
+++ b/screen.py
@@ -166,6 +166,9 @@ class KlipperScreen(Gtk.Window):
             while len(self.printer_select_callbacks) > 0:
                 i = self.printer_select_callbacks.pop(0)
                 i()
+            if self.printer.get_state() not in ["disconnected", "error", "startup", "shutdown"]:
+                self.base_panel.show_heaters(True)
+            self.base_panel.show_printer_select(True)
             self.base_panel.show_macro_shortcut(self._config.get_main_config_option('side_macro_shortcut'))
             return
 
@@ -210,6 +213,7 @@ class KlipperScreen(Gtk.Window):
             self.subscriptions = []
         for panel in panels:
             del self.panels[panel]
+        self.base_panel.show_printer_select(True)
         self.printer_initializing(_("Connecting to %s") % name)
 
         self.printer.set_callbacks({
@@ -587,8 +591,11 @@ class KlipperScreen(Gtk.Window):
     def show_printer_select(self, widget=None):
         logging.debug("Saving panel: %s" % self._cur_panels[0])
         self.printer_select_prepanel = self._cur_panels[0]
-        self.show_panel("printer_select", "printer_select", "Printer Select", 2)
+        self.base_panel.show_heaters(False)
         self.base_panel.show_macro_shortcut(False)
+        self.base_panel.show_printer_select(False)
+        self.show_panel("printer_select", "printer_select", "Printer Select", 2)
+        self.show_all()
 
     def state_execute(self, callback, prev_state):
         if self.is_updating():