diff --git a/soitool/modules/module_base.py b/soitool/modules/module_base.py
index 1d6f055d20dd0a418317e7a77d3e140540159b2d..99812778078ad7fd0521e23ae557e71a2c9f1e12 100644
--- a/soitool/modules/module_base.py
+++ b/soitool/modules/module_base.py
@@ -1,6 +1,7 @@
 """Base/interface of each module."""
 from abc import ABC
 from PySide2 import QtGui
+from PySide2.QtCore import Qt
 
 # Font for module headline
 HEADLINE_FONT = QtGui.QFont()
@@ -118,3 +119,57 @@ def set_module_pos(widget, pos):
         Position (x, y).
     """
     widget.move(pos)
+
+
+def event_is_ctrl_plus(event):
+    """Check if the event is 'CTRL +'.
+
+    Parameters
+    ----------
+    event : QKeyEvent
+        Event to check.
+    """
+    return (
+        event.modifiers() == Qt.ControlModifier and event.key() == Qt.Key_Plus
+    )
+
+
+def event_is_ctrl_minus(event):
+    """Check if the event is 'CTRL -'.
+
+    Parameters
+    ----------
+    event : QKeyEvent
+        Event to check.
+    """
+    # Underline is in practice minus in this situation. We don't know why
+    return (
+        event.modifiers() == Qt.ControlModifier
+        and event.key() == Qt.Key_Underscore
+    )
+
+
+def event_is_shift_plus(event):
+    """Check if the event is 'SHIFT +'.
+
+    Parameters
+    ----------
+    event : QKeyEvent
+        Event to check.
+    """
+    return event.key() == Qt.Key_Question
+
+
+def event_is_shift_minus(event):
+    """Check if the event is 'SHIFT -'.
+
+    Parameters
+    ----------
+    event : QKeyEvent
+        Event to check.
+    """
+    # Underline is in practice minus in this situation. We don't know why
+    return (
+        event.modifiers() == Qt.ShiftModifier
+        and event.key() == Qt.Key_Underscore
+    )
diff --git a/soitool/modules/module_code_phrase.py b/soitool/modules/module_code_phrase.py
index 5349e1a2883a09e0b9edecdcfb4295f099791db6..098490c49ea2efd9eac8f9a65320290aee09e03d 100644
--- a/soitool/modules/module_code_phrase.py
+++ b/soitool/modules/module_code_phrase.py
@@ -7,12 +7,13 @@ from PySide2.QtWidgets import (
     QWidget,
     QVBoxLayout,
 )
-from PySide2 import QtCore
 from PySide2.QtCore import Qt
 from PySide2.QtGui import QIcon
 from soitool.modules.module_base import (
     ModuleBase,
     HEADLINE_FONT,
+    event_is_ctrl_plus,
+    event_is_ctrl_minus,
 )
 from soitool.modules.fit_to_contents_widgets import (
     TableWithSizeOfContent,
@@ -162,7 +163,7 @@ class CodePhraseModule(ModuleBase, QWidget, metaclass=Meta):
         """
         item = QTableWidgetItem(code)
         item.setFlags(item.flags() ^ Qt.ItemIsEditable)
-        self.table.setItem(self.table.currentRow() + 1, CODE_COLUMN, item)
+        self.table.setItem(row, CODE_COLUMN, item)
 
     def set_phrase_table_item(self, row, phrase):
         """Set phrase at row.
@@ -175,7 +176,7 @@ class CodePhraseModule(ModuleBase, QWidget, metaclass=Meta):
             Phrase to set.
         """
         item = QTableWidgetItem(phrase)
-        self.table.setItem(self.table.currentRow() + 1, PHRASE_COLUMN, item)
+        self.table.setItem(row, PHRASE_COLUMN, item)
 
     def remove_row(self):
         """Remove selected row.
@@ -199,15 +200,9 @@ class CodePhraseModule(ModuleBase, QWidget, metaclass=Meta):
         event : QKeyEvent
             event sent by Qt for us to handle
         """
-        if (
-            event.modifiers() == QtCore.Qt.ControlModifier
-            and event.key() == QtCore.Qt.Key_Plus
-        ):
+        if event_is_ctrl_plus(event):
             self.add_row()
-        elif (
-            event.modifiers() == QtCore.Qt.ControlModifier
-            and event.key() == QtCore.Qt.Key_Underscore  # In practice minus
-        ):
+        elif event_is_ctrl_minus(event):
             self.remove_row()
 
     def get_category(self):
diff --git a/soitool/modules/module_table.py b/soitool/modules/module_table.py
index 43bef7fb8d9e3ca625877c9ae7dfae4705b3dd93..1a11e85ab5b7ab74a654556d472a33032ce5fb62 100644
--- a/soitool/modules/module_table.py
+++ b/soitool/modules/module_table.py
@@ -6,6 +6,10 @@ from soitool.modules.module_base import (
     resize_table,
     get_table_size,
     HEADLINE_FONT,
+    event_is_shift_plus,
+    event_is_shift_minus,
+    event_is_ctrl_plus,
+    event_is_ctrl_minus,
 )
 
 START_ROWS = 2
@@ -88,22 +92,13 @@ class TableModule(ModuleBase, QTableWidget, metaclass=Meta):
         event : QKeyEvent
             event sent by Qt for us to handle
         """
-        if event.key() == QtCore.Qt.Key_Question:
+        if event_is_shift_plus(event):
             self.add_column()
-        elif (
-            event.modifiers() == QtCore.Qt.ShiftModifier
-            and event.key() == QtCore.Qt.Key_Underscore
-        ):
+        elif event_is_shift_minus(event):
             self.remove_column()
-        elif (
-            event.modifiers() == QtCore.Qt.ControlModifier
-            and event.key() == QtCore.Qt.Key_Plus
-        ):
+        elif event_is_ctrl_plus(event):
             self.add_row()
-        elif (
-            event.modifiers() == QtCore.Qt.ControlModifier
-            and event.key() == QtCore.Qt.Key_Underscore
-        ):
+        elif event_is_ctrl_minus(event):
             self.remove_row()
         else:
             super(TableModule, self).keyPressEvent(event)