diff --git a/Ccs/monitor.py b/Ccs/monitor.py
index 9cd4c88d0e56fcb80ef606f6a90ed11743153792..58a78f513cea699885e7abee2d297018ef5d78b6 100644
--- a/Ccs/monitor.py
+++ b/Ccs/monitor.py
@@ -63,16 +63,17 @@ class ParameterMonitor(Gtk.Window):
         hbox = Gtk.HBox()
         self.add(hbox)
 
-        self._res_evt_cnt_callback = None
-        self.evt_cnt = self.create_event_counter()
-        self.evt_check_enabled = True
-        self.evt_check_tocnt = 0
-
         self.pool_id = None  # used to track "clear pool" events
         self.pool_name = pool_name
         self.parameter_set = parameter_set
         self.parameters = {}
         self.monitored_pkts = None
+        self._cal_active = 1
+
+        self._res_evt_cnt_callback = None
+        self.evt_cnt = self.create_event_counter()
+        self.evt_check_enabled = True
+        self.evt_check_tocnt = 0
 
         hbox.pack_start(self.evt_cnt, 0, 0, 0)
         hbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.VERTICAL), 0, 1, 0)
@@ -142,8 +143,15 @@ class ParameterMonitor(Gtk.Window):
         set_button.set_tooltip_text('Select/create set of monitored parameters')
         set_button.connect('clicked', self.add_evt_cnt)
 
+        cal_button = Gtk.ToggleButton(label='Calibrated')
+        cal_button.set_tooltip_text('Display calibrated parameter values')
+        cal_button.set_active(self._cal_active)
+        cal_button.connect('clicked', self._on_calibrated)
+
         evt_cnt.pack_start(reset_button, 0, 0, 0)
         evt_cnt.pack_start(set_button, 0, 0, 0)
+        evt_cnt.pack_start(cal_button, 0, 0, 0)
+
         evt_cnt.set_spacing(7)
 
         return evt_cnt
@@ -204,10 +212,10 @@ class ParameterMonitor(Gtk.Window):
 
     def _on_select_about_dialog(self, action):
         cfl.about_dialog(self)
-        return
 
-    def get_active_pool_name(self):
-        return self.pool_selector.get_active_text()
+    def _on_calibrated(self, widget, *args):
+        self._cal_active = int(widget.get_active())
+        GLib.idle_add(self.updt_buf)
 
     def set_parameter_view(self, parameter_set):
         # update user_limit dict
@@ -391,11 +399,11 @@ class ParameterMonitor(Gtk.Window):
                     pname = self.pname_from_pktid[pktid]
                     xy, par = cfl.get_param_values(tmlist=[pkt], hk='User defined', param=pname, last=1, tmfilter=False, mk_array=False)
                     udtype = 'user_defined'
-                    self.monitored_pkts[pktid]['data'] = {'{}:{}'.format(udtype, par[0]): xy[0][1]}
+                    self.monitored_pkts[pktid]['data'] = {'{}:{}'.format(udtype, par[0]): (xy[0][1], xy[0][1])}
                 else:
                     try:
                         tm = cfl.Tmdata(pkt)[0]
-                        self.monitored_pkts[pktid]['data'] = {self.get_param_id(par): par[0] for par in tm}
+                        self.monitored_pkts[pktid]['data'] = {self.get_param_id(par): (par[4][0], par[0]) for par in tm}
                     except Exception as err:
                         self.logger.info('{} {}'.format(err, pktid))
                         continue
@@ -411,7 +419,7 @@ class ParameterMonitor(Gtk.Window):
                 continue
             else:
                 try:
-                    value = self.monitored_pkts[pktid]['data'][pname]
+                    rawval, calval = self.monitored_pkts[pktid]['data'][pname]
                 except Exception as err:
                     self.logger.warning('Could not update value of {} [{}]!'.format(pname, str(err)))
                     continue
@@ -423,31 +431,12 @@ class ParameterMonitor(Gtk.Window):
                     user_limit = self.user_limits[self.pdescr[pname]]
                 else:
                     user_limit = None
-                limit_color = self.limit_colors[cfl.Tm_limits_check(pname, value, user_limit)]
+                limit_color = self.limit_colors[cfl.Tm_limits_check(pname, calval, user_limit)]
 
-            self.parameters[pname]['value'] = value
+            self.parameters[pname]['value'] = rawval, calval
             self.parameters[pname]['alarm'] = limit_color
 
-        def updt_buf():
-            for par in self.parameters:
-                buf = self.parameters[par]['field'].get_buffer()
-                buf.delete(*buf.get_bounds())
-                if self.parameters[par]['value'] is None:
-                    buf.insert_markup(buf.get_start_iter(),
-                                      '<span size="large" foreground="{}" weight="bold">{}</span>'.format(
-                                          self.parameters[par]['alarm'], '--'), -1)
-                else:
-                    val = self.parameters[par]['value']
-                    if isinstance(val, bytes):
-                        txt = '<span size="large" foreground="{}" weight="bold">0x{}</span>'.format(
-                            self.parameters[par]['alarm'], val.hex().upper())
-                    else:
-                        txt = '<span size="large" foreground="{}" weight="bold">{:{fstr}}</span>'.format(
-                            self.parameters[par]['alarm'], val, fstr=self.parameters[par]['format'])
-
-                    buf.insert_markup(buf.get_start_iter(), txt, -1)
-
-        GLib.idle_add(updt_buf)
+        GLib.idle_add(self.updt_buf)
 
         if self.evt_check_enabled:
             ctime = time.time()
@@ -486,15 +475,33 @@ class ParameterMonitor(Gtk.Window):
         # GLib.idle_add(updt_bg_color)
         # return
 
-    def get_last_pkt_with_id(self, rows, pktid, pidx=0):
+    def updt_buf(self):
+        for par in self.parameters:
+            buf = self.parameters[par]['field'].get_buffer()
+            buf.delete(*buf.get_bounds())
+            if self.parameters[par]['value'] is None:
+                buf.insert_markup(buf.get_start_iter(),
+                                  '<span size="large" foreground="{}" weight="bold">{}</span>'.format(
+                                      self.parameters[par]['alarm'], '--'), -1)
+            else:
+                rawcal = self.parameters[par]['value']
+                if isinstance(rawcal[self._cal_active], bytes):
+                    txt = '<span size="large" foreground="{}" weight="bold">0x{}</span>'.format(
+                        self.parameters[par]['alarm'], rawcal[[self._cal_active]].hex().upper())
+                else:
+                    val = rawcal[self._cal_active]
+                    fmt = self.parameters[par]['format'][self._cal_active]
+                    txt = '<span size="large" foreground="{}" weight="bold">{:{fstr}}</span>'.format(
+                        self.parameters[par]['alarm'], val, fstr=fmt)
+
+                buf.insert_markup(buf.get_start_iter(), txt, -1)
+
+    @staticmethod
+    def get_last_pkt_with_id(rows, pktid, pidx=0):
         spid, st, sst, apid, pi1, pi1off, pi1wid = pktid
         if pi1off != -1:  # and (pi1off is not None):
-            # rows = rows.filter(DbTelemetry.stc == st, DbTelemetry.sst == sst, DbTelemetry.apid == apid,
-            #                    func.mid(DbTelemetry.data, pi1off - cfl.TM_HEADER_LEN + 1, pi1wid // 8) == pi1.to_bytes(
-            #                     pi1wid // 8, 'big'), DbTelemetry.idx>=pidx).order_by(DbTelemetry.idx.desc()).first()
             rows = cfl.filter_rows(rows, st=st, sst=sst, apid=apid, sid=pi1, idx_from=pidx).order_by(DbTelemetry.idx.desc()).first()
         else:
-            # rows = rows.filter(DbTelemetry.stc == st, DbTelemetry.sst == sst, DbTelemetry.apid == apid, DbTelemetry.idx>=pidx).order_by(DbTelemetry.idx.desc()).first()
             rows = cfl.filter_rows(rows, st=st, sst=sst, apid=apid, idx_from=pidx).order_by(DbTelemetry.idx.desc()).first()
         if rows is None:
             return
@@ -515,10 +522,19 @@ class ParameterMonitor(Gtk.Window):
         else:
             return par[0]
 
-    def get_fstr(self, param_id, name, categ=None):
+    @staticmethod
+    def get_fstr(param_id, name, categ=None):
+        """
+        Return fmt string pair for display of raw and calibrated value
+
+        :param param_id:
+        :param name:
+        :param categ:
+        :return:
+        """
 
         if categ == 'S':
-            return 's'
+            return 'd', 's'
 
         udtype = param_id.split(':')[0]
         pinfo = cfl._parameter_decoding_info((name, udtype), check_curtx=True)
@@ -527,18 +543,18 @@ class ParameterMonitor(Gtk.Window):
         curtx = pinfo[4]
 
         if ptc in [7]:
-            return ''
+            return '', ''
         elif ptc in [5, 9]:
-            return '.13G'
+            return '.13G', '.13G'
         elif ptc in [8]:
-            return 's'
+            return '', 's'
         elif curtx is not None:  # numerically calibrated
-            return '.7G'
+            return 'd', '.7G'
         else:
             # check if externally calibrated
             if cfl.cal is not None and cfl.cal.calibrate_ext(0, name, exception=True) is not None:
-                return '.7G'
-            return 'd'
+                return 'd', '.7G'
+            return 'd', 'd'
 
     def pckt_counter(self, rows, st, sst, pidx=0):
         npckts = rows.filter(DbTelemetry.stc == st, DbTelemetry.sst == sst, DbTelemetry.idx > pidx).count()
@@ -552,7 +568,7 @@ class ParameterMonitor(Gtk.Window):
                                   'red' if self.events[evt][1] > self.evt_reset_values[evt] else 'black',
                                   self.events[evt][1]), -1)
 
-        for event in self.evt_cnt.get_children()[:-2]:
+        for event in self.evt_cnt.get_children()[:3]:
             evt = event.get_children()[0].get_text()
 
             if incremental:
@@ -576,7 +592,7 @@ class ParameterMonitor(Gtk.Window):
         # GLib.idle_add(updt_bg_color)
 
     def reset_evt_cnt(self, widget=None):
-        panels = [x.get_children() for x in self.evt_cnt.get_children()[:-2]]
+        panels = [x.get_children() for x in self.evt_cnt.get_children()[:3]]
         for panel in panels:
             buf = panel[1].get_buffer()
             value = int(buf.get_text(*buf.get_bounds(), True))
@@ -592,13 +608,13 @@ class ParameterMonitor(Gtk.Window):
             cbuf.insert_markup(cbuf.get_start_iter(), '<span size="large" foreground="{}" weight="bold">{}</span>'.format(
                 'grey', self.events[cevt][1]), -1)
 
-        for evt in self.evt_cnt.get_children()[:-2]:
+        for evt in self.evt_cnt.get_children()[:3]:
             evt.set_sensitive(False)
             buf = evt.get_children()[1]
 
             GLib.idle_add(updt_buf, buf.get_buffer(), evt.get_children()[0].get_text())
 
-        rbutton = self.evt_cnt.get_children()[-2]
+        rbutton = self.evt_cnt.get_children()[3]
         rbutton.set_label('Count EVTs')
         rbutton.set_tooltip_text('Event counting has been disabled because of heavy load, probably because of a too large pool. Click to force count update.')
         rbutton.disconnect(self._res_evt_cnt_callback)
@@ -614,7 +630,7 @@ class ParameterMonitor(Gtk.Window):
             cbuf.insert_markup(cbuf.get_start_iter(), '<span size="large" foreground="{}" weight="bold">{}</span>'.format(
                 'black', self.events[cevt][1]), -1)
 
-        for evt in self.evt_cnt.get_children()[:-2]:
+        for evt in self.evt_cnt.get_children()[:3]:
             evt.set_sensitive(True)
             buf = evt.get_children()[1]
 
@@ -632,11 +648,9 @@ class ParameterMonitor(Gtk.Window):
 
     def set_update_interval(self, widget=None, interval=1.0):
         self.interval = interval
-        return
 
     def set_max_age(self, widget=None, max_age=20):
         self.max_age = max_age
-        return
 
     def monitor_setup(self, parameter_set=None, nslots=3):
         if parameter_set is not None: