diff --git a/soitool/dialog_wrappers.py b/soitool/dialog_wrappers.py
new file mode 100644
index 0000000000000000000000000000000000000000..e01ba7dd9188123eaf30412da9d37bc15184d888
--- /dev/null
+++ b/soitool/dialog_wrappers.py
@@ -0,0 +1,59 @@
+"""Includes methods that wrap Qt dialogs to reduce code duplication."""
+
+from PySide2.QtWidgets import QMessageBox
+
+
+def exec_qmessagebox_dialog(window_title, text, informative_text, icon):
+    """Execute QMessageBox dialog with feedback to user.
+
+    Just a wrapper around QMessageBox.
+
+    Parameters
+    ----------
+    text : str
+        sets header of dialog. See
+        https://doc.qt.io/qt-5/qmessagebox.html#text-prop
+    informative_text : str
+        sets body of dialog. See
+        https://doc.qt.io/qt-5/qmessagebox.html#informativeText-prop
+    icon : QMessageBox.Icon
+        icon to show the user. Use one of the predefined icons as defined here:
+        https://doc.qt.io/qt-5/qmessagebox.html#Icon-enum
+    """
+    error_message = QMessageBox()
+    error_message.setWindowTitle(window_title)
+    error_message.setText(text)
+    error_message.setInformativeText(informative_text)
+    error_message.setIcon(icon)
+    error_message.exec_()
+
+
+def exec_critical_dialog(text, informative_text):
+    """Execute QMessageBox dialog with critical icon.
+
+    This is simply a wrapper displaying a particular icon. See the
+    documentation for exec_qmessagebox_dialog for parameter docs.
+    """
+    exec_qmessagebox_dialog(
+        "Error", text, informative_text, QMessageBox.Critical
+    )
+
+
+def exec_warning_dialog(text, informative_text):
+    """Execute QMessageBox dialog with warning icon.
+
+    This is simply a wrapper displaying a particular icon. See the
+    documentation for exec_qmessagebox_dialog for parameter docs.
+    """
+    exec_qmessagebox_dialog(
+        "Advarsel", text, informative_text, QMessageBox.Warning
+    )
+
+
+def exec_info_dialog(text, informative_text):
+    """Execute QMessageBox dialog with info icon.
+
+    This is simply a wrapper displaying a particular icon. See the
+    documentation for exec_qmessagebox_dialog for parameter docs.
+    """
+    exec_qmessagebox_dialog("Info", text, informative_text, QMessageBox.Info)
diff --git a/soitool/inline_editable_soi_view.py b/soitool/inline_editable_soi_view.py
index 0a71a1f857366b4125fb61b443639da958f9bbdf..ff6c124894295e8759864e711e095176f8d7c181 100644
--- a/soitool/inline_editable_soi_view.py
+++ b/soitool/inline_editable_soi_view.py
@@ -7,11 +7,11 @@ from PySide2.QtWidgets import (
     QGraphicsScene,
     QGraphicsView,
     QGraphicsRectItem,
-    QMessageBox,
 )
 from PySide2.QtGui import QFont, QPixmap, QBrush, QPalette, QPainter
 from PySide2.QtPrintSupport import QPrinter
 from soitool.soi import ModuleLargerThanBinError
+from soitool.dialog_wrappers import exec_warning_dialog
 
 
 class InlineEditableSOIView(QScrollArea):
@@ -44,17 +44,13 @@ class InlineEditableSOIView(QScrollArea):
         try:
             self.soi.reorganize()
         except ModuleLargerThanBinError:
-            error_message = QMessageBox()
-            error_message.setText(
-                "Minst én av modulene er for store for å passe på én side!"
+            exec_warning_dialog(
+                text="Minst én av modulene er for store "
+                "for å passe på én side!",
+                informative_text="Programmet kan desverre ikke fikse dette "
+                "for deg. Se igjennom modulene og sjekk at "
+                "alle moduler er mindre enn én enkelt side.",
             )
-            error_message.setInformativeText(
-                "Programmet kan desverre ikke fikse dette for deg. Se "
-                "igjennom modulene og sjekk at alle moduler er mindre "
-                "enn én enkelt side."
-            )
-            error_message.setIcon(QMessageBox.Warning)
-            error_message.exec_()
         self.update_pages()
 
     def __init__(self, soi):
diff --git a/soitool/module_list.py b/soitool/module_list.py
index a6ac18cf1b569d06c843e04f1ab7193ef232b1a8..9a919de4b36f5ca952d925341ae3aa60bb9fdd67 100644
--- a/soitool/module_list.py
+++ b/soitool/module_list.py
@@ -4,9 +4,9 @@ from PySide2.QtWidgets import (
     QListWidget,
     QListWidgetItem,
     QAbstractItemView,
-    QMessageBox,
 )
 from soitool.soi import ModuleType
+from soitool.dialog_wrappers import exec_warning_dialog
 import soitool
 
 
@@ -155,18 +155,15 @@ class ModuleList(QListWidget):
             Is sent to super().
         """
         if self.parent.soi.algorithm_sort != "none":
-            error_message = QMessageBox()
-            error_message.setText(
-                "SOI er ikke innstilt for automatisk plassering av moduler!"
+            exec_warning_dialog(
+                text="SOI er ikke innstilt for automatisk plassering av "
+                "moduler!",
+                informative_text="Enn så lenge vil manuell prioritering av "
+                "moduler bare fungere dersom SOI er innstilt til ikke å gjøre "
+                "sortering av moduler før pakking. I fremtiden vil det være "
+                "mulig å låse utvalgte moduler, men la resten optimalt "
+                "pakkes.",
             )
-            error_message.setInformativeText(
-                "Enn så lenge vil manuell prioritering av moduler bare "
-                "fungere dersom SOI er innstilt til ikke å gjøre sortering av "
-                "moduler før pakking. I fremtiden vil det være mulig å låse "
-                "utvalgte moduler, men la resten optimalt pakkes."
-            )
-            error_message.setIcon(QMessageBox.Warning)
-            error_message.exec_()
             # ignorerer dropEvent ved å returnere tidlig
             return