diff --git a/app/inventory/views.py b/app/inventory/views.py
index 20a9a36d17064722be9d7ff04b1236778fd722da..70746c3ef29f95b4a2791bb14c269b74e046b7cb 100644
--- a/app/inventory/views.py
+++ b/app/inventory/views.py
@@ -146,7 +146,7 @@ def qrcodes(kind='Action'):
         raise utils.CSEntryError(f"Unknown model '{kind}'", status_code=422)
     items = db.session.query(model).order_by(model.name)
     images = [{'name': item.name,
-               'data': utils.image_to_base64(item.image())}
+               'data': item.base64_image()}
               for item in items]
     return render_template('inventory/qrcodes.html', kind=kind, images=images)
 
diff --git a/app/models.py b/app/models.py
index 2d0d7b9e1939269f3de150f725c99b168b11db0f..47888491664e9e4f33e1fecda86113a8be8987ce 100644
--- a/app/models.py
+++ b/app/models.py
@@ -22,7 +22,7 @@ from citext import CIText
 from flask import current_app
 from flask_login import UserMixin
 from wtforms import ValidationError
-from .extensions import db, login_manager, ldap_manager
+from .extensions import db, login_manager, ldap_manager, cache
 from .plugins import FlaskUserPlugin
 from .validators import ICS_ID_RE, HOST_NAME_RE, VLAN_NAME_RE
 from . import utils
@@ -209,14 +209,25 @@ class QRCodeMixin:
         data = ':'.join(['CSE', self.__tablename__, self.name])
         return qrcode.make(data, version=1, box_size=5)
 
+    @cache.memoize(timeout=0)
+    def base64_image(self):
+        """Return the QRCode image as base64 string"""
+        return utils.image_to_base64(self.image())
+
     def __str__(self):
         return self.name
 
+    def __repr__(self):
+        # The cache.memoize decorator performs a repr() on the passed in arguments
+        # __repr__ is used as part of the cache key and shall be a uniquely identifying string
+        # See https://flask-caching.readthedocs.io/en/latest/#memoization
+        return f'{self.__class__.__name__}(id={self.id}, name={self.name})'
+
     def to_dict(self):
         return {
             'id': self.id,
             'name': self.name,
-            'qrcode': utils.image_to_base64(self.image()),
+            'qrcode': self.base64_image(),
         }