diff --git a/cutelog/__main__.py b/cutelog/__main__.py
index 06219fd3281c64d272a052a21bd4b28b4ca6085c..0574f08deaa7f4a4b09f987c1dd917836810a63f 100644
--- a/cutelog/__main__.py
+++ b/cutelog/__main__.py
@@ -20,6 +20,11 @@ def main():
     from qtpy.QtGui import QIcon
     from qtpy.QtWidgets import QApplication
 
+    if sys.platform == 'win32':
+        import ctypes
+        appid = 'busimus.cutelog'
+        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(appid)
+
     app = QApplication(sys.argv)
     app.setWindowIcon(QIcon(':/cutelog.png'))
     mw = MainWindow(ROOT_LOG, app)
diff --git a/cutelog/listener.py b/cutelog/listener.py
index 9d50c4370d371617b81428e5fe54bacb14c02744..e29f996c2aeeee1b62fce42eaf60fc0e83ea6cf8 100644
--- a/cutelog/listener.py
+++ b/cutelog/listener.py
@@ -165,6 +165,9 @@ class LogConnection(QThread):
 
             try:
                 logDict = self.deserialize(data)
+                for k, v in logDict.items():
+                    if type(v) not in (str, int, type(None)):
+                        logDict[k] = str(v)
                 record = LogRecord(logDict)
             except Exception:
                 self.log.error('Creating log record failed', exc_info=True)
@@ -250,7 +253,7 @@ class BenchmarkConnection(LogConnection):
             level_index = c % len(test_levels)
             dd['levelname'] = test_levels[level_index][1]
             if dd['levelname'] == "CRITICAL":
-                dd['exc_text'] = 'exception test'
+                dd['exc_text'] = 'exception test\nmultiple lines\ntest 123'
 
             for i in range(random.randrange(6)):
                 dd[str(i) + "f"] = random.randrange(256)
diff --git a/cutelog/logger_tab.py b/cutelog/logger_tab.py
index c5fc9fd8f953831f09202b6d0972f9732d15fbb7..5ec0ae24c8992ffb310458bfb243c0ced95daef4 100644
--- a/cutelog/logger_tab.py
+++ b/cutelog/logger_tab.py
@@ -13,8 +13,7 @@ from .level_edit_dialog import LevelEditDialog
 from .levels_preset_dialog import LevelsPresetDialog
 from .log_levels import NO_LEVEL, LevelFilter, LogLevel, get_default_level
 from .logger_table_header import HeaderEditDialog, LoggerTableHeader
-from .text_view_dialog import TextViewDialog
-from .utils import loadUi
+from .utils import loadUi, show_textview_dialog
 
 INVALID_INDEX = QModelIndex()
 SearchRole = 256
@@ -432,8 +431,8 @@ class RecordFilter(QSortFilterProxyModel):
 
 
 class DetailTableModel(QAbstractTableModel):
-    def __init__(self):
-        super().__init__()
+    def __init__(self, parent):
+        super().__init__(parent)
         self.record = tuple()
 
     def columnCount(self, index):
@@ -467,6 +466,13 @@ class DetailTableModel(QAbstractTableModel):
         self.record = tuple(record_dict.items())
         self.reset()
 
+    def open_row_popup(self, index):
+        print(index)
+        print(index.row())
+        row = self.record[index.row()]
+        text = str(row[1]) if row[1] is not None else row[1]
+        show_textview_dialog(self.parent(), 'Field "{}"'.format(row[0]), text)
+
 
 class LoggerTab(QWidget):
     def __init__(self, parent, name, connection, log, main_window):
@@ -477,7 +483,7 @@ class LoggerTab(QWidget):
         self.main_window = main_window
         self.level_filter = LevelFilter()
         self.filter_model_enabled = True
-        self.detail_model = DetailTableModel()
+        self.detail_model = DetailTableModel(self)
         self.namespace_tree_model = LogNamespaceTreeModel()
         self.popped_out = False
         self.autoscroll = True
@@ -540,6 +546,7 @@ class LoggerTab(QWidget):
 
         self.loggerTable.selectionModel().selectionChanged.connect(self.update_detail)
         self.detailTable.setModel(self.detail_model)
+        self.detailTable.doubleClicked.connect(self.detail_model.open_row_popup)
 
         self.table_header_view = header = self.loggerTable.horizontalHeader()
         header.setStretchLastSection(True)
@@ -844,11 +851,9 @@ class LoggerTab(QWidget):
 
     def open_text_view_dialog(self, index, exception=False):
         record = self.get_record(index)
-        d = TextViewDialog(self.main_window, record.exc_text if exception else record.message)
-        d.setWindowModality(Qt.NonModal)
-        d.setAttribute(Qt.WA_DeleteOnClose, True)
-        d.setWindowTitle('Exception traceback' if exception else 'View message')
-        d.open()
+        text = record.exc_text if exception else record.message
+        title = 'Exception traceback' if exception else 'View message'
+        show_textview_dialog(self.main_window, title, text)
 
     def enable_all_levels(self):
         for row in range(self.levelsTable.rowCount()):
diff --git a/cutelog/settings_dialog.py b/cutelog/settings_dialog.py
index b425a7f03d79962f5a7e46779f3343b86350784a..9e784e30451692c3cd6604362cb4ead2dd1378f1 100644
--- a/cutelog/settings_dialog.py
+++ b/cutelog/settings_dialog.py
@@ -10,7 +10,6 @@ from .utils import loadUi, show_info_dialog
 class SettingsDialog(QDialog):
     def __init__(self, parent):
         super().__init__(parent)
-        self.parent_widget = parent
         self.server_restart_needed = False
         self.time_format_validator = TimeFormatValidator(self)
         self.setupUi()
@@ -116,7 +115,7 @@ class SettingsDialog(QDialog):
     def accept(self):
         self.save_to_config()
         if self.server_restart_needed:
-            show_info_dialog(self.parent_widget, 'Warning',
+            show_info_dialog(self.parent(), 'Warning',
                              'You need to restart the server for the changes to take effect')
         self.done(0)
 
@@ -127,7 +126,7 @@ class SettingsDialog(QDialog):
         self.server_restart_needed = True
 
     def display_warning(self):
-        m = QMessageBox(self.parent_widget)
+        m = QMessageBox(self.parent())
         m.setText('You need to restart the server for the changes to take effect')
         m.setWindowTitle('Warning')
         m.setIcon(QMessageBox.Information)
diff --git a/cutelog/utils.py b/cutelog/utils.py
index 3f06c32cc32cd386a15bedf8c484c45d51932ae9..0a132858db59ce7934b64ee155740cccd78eb7c4 100644
--- a/cutelog/utils.py
+++ b/cutelog/utils.py
@@ -1,6 +1,7 @@
 import qtpy
 from qtpy.QtCore import QMetaObject, Qt
 from qtpy.QtWidgets import QDesktopWidget, QMessageBox
+from .text_view_dialog import TextViewDialog
 
 
 def show_info_dialog(parent, title, text):
@@ -26,6 +27,14 @@ def show_dialog(parent, title, text, icon):
     center_widget_on_screen(m)
 
 
+def show_textview_dialog(parent, title, text, icon=QMessageBox.Information):
+    d = TextViewDialog(parent, text)
+    d.setWindowModality(Qt.NonModal)
+    d.setAttribute(Qt.WA_DeleteOnClose, True)
+    d.setWindowTitle(title)
+    d.open()
+
+
 def center_widget_on_screen(widget):
     rect = widget.frameGeometry()
     center = QDesktopWidget().availableGeometry().center()
diff --git a/setup.py b/setup.py
index 131121b2a276021999758a85f27dded0e8d30fb1..32d3230305618afcafd0b4097f0280602f94d611 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ from setuptools import setup
 from setuptools.command.install import install
 
 
-VERSION = '2.0.3'
+VERSION = '2.0.4'
 
 
 def build_qt_resources():