diff --git a/gajim/common/app.py b/gajim/common/app.py
index 783381c25dbe3607c97c041fb4dca1eade0dba19..531d6bda1d55e1b7e95ae6630341158cabf990f5 100644
--- a/gajim/common/app.py
+++ b/gajim/common/app.py
@@ -71,8 +71,6 @@
 
 css_config = None
 
-os_info = None # used to cache os information
-
 transport_type = {}  # type: Dict[str, str]
 
 # dict of time of the latest incoming message per jid
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index 73c1f6895db792e87f4053e593dfd59d6aec9dc2..031c98d28a24fef46baf9a2befa836d242941dde 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -45,6 +45,8 @@
 import json
 import copy
 import collections
+import platform
+import functools
 from collections import defaultdict
 import random
 import weakref
@@ -702,21 +704,19 @@ def get_random_string(count=16):
     allowed = string.ascii_uppercase + string.digits
     return ''.join(random.choice(allowed) for char in range(count))
 
+@functools.lru_cache(maxsize=1)
 def get_os_info():
-    if app.os_info:
-        return app.os_info
-    app.os_info = 'N/A'
-    if os.name == 'nt' or sys.platform == 'darwin':
-        import platform
-        app.os_info = platform.system() + " " + platform.release()
-    elif os.name == 'posix':
+    info = 'N/A'
+    if sys.platform in ('win32', 'darwin'):
+        info = f'{platform.system()} {platform.release()}'
+
+    elif sys.platform == 'linux':
         try:
             import distro
-            app.os_info = distro.name(pretty=True)
+            info = distro.name(pretty=True)
         except ImportError:
-            import platform
-            app.os_info = platform.system()
-    return app.os_info
+            info = platform.system()
+    return info
 
 def allow_showing_notification(account, type_='notify_on_new_message',
 is_first_message=True):