diff --git a/app/controllers/course/contentmodules.php b/app/controllers/course/contentmodules.php
index 923c61b9f488d075b7eccbde6cce722064e8279d..df397cdf42fac99909c43e7168da6bb0d1ae9f14 100644
--- a/app/controllers/course/contentmodules.php
+++ b/app/controllers/course/contentmodules.php
@@ -261,7 +261,12 @@ class Course_ContentmodulesController extends AuthenticatedController
             }
         }
 
-        PageLayout::setTitle(sprintf(_('Informationen über %s'), $this->metadata['displayname']));
+        $this->metadata['icon'] = $this->getIconFromMetadata($this->metadata, $this->plugin);
+
+        PageLayout::setTitle(sprintf(
+            _('Informationen über %s'),
+            $this->metadata['displayname'] ?? $this->plugin->getPluginName()
+        ));
     }
 
     private function getModules(Range $context)
@@ -291,6 +296,7 @@ class Course_ContentmodulesController extends AuthenticatedController
             $visibility = $tool ? $tool->getVisibilityPermission() : 'nobody';
 
             $metadata = $plugin->getMetadata();
+            $icon = $this->getIconFromMetadata($metadata, $plugin);
             $list[$plugin_id] = [
                 'id'             => $plugin_id,
                 'moduleclass'    => get_class($plugin),
@@ -299,7 +305,7 @@ class Course_ContentmodulesController extends AuthenticatedController
                 'displayname'    => $displayname,
                 'visibility'     => $visibility,
                 'active'         => (bool) $tool,
-                'icon'           => $this->getIconFromMetadata($metadata, $plugin),
+                'icon'           => $icon ? $icon->asImagePath() : null,
                 'summary'        => $metadata['summary'] ?? null,
                 'mandatory'      => $this->sem_class->isModuleMandatory(get_class($plugin)),
                 'highlighted'    => (bool) $plugin->isHighlighted(),
@@ -315,7 +321,7 @@ class Course_ContentmodulesController extends AuthenticatedController
      * @param array $metadata
      * @param CorePlugin|StudIPPlugin $plugin
      */
-    private function getIconFromMetadata(array $metadata, $plugin): ?string
+    private function getIconFromMetadata(array $metadata, $plugin): ?Icon
     {
         $icon = $metadata['icon_clickable'] ?? $metadata['icon'] ?? null;
 
@@ -332,7 +338,7 @@ class Course_ContentmodulesController extends AuthenticatedController
             $icon = Icon::create($plugin->getPluginURL() . '/' . $icon);
         }
 
-        return $icon->copyWithRole(Icon::ROLE_CLICKABLE)->asImagePath();
+        return $icon->copyWithRole(Icon::ROLE_CLICKABLE);
     }
 
     private function getCoreIcon(string $path): ?Icon
diff --git a/app/views/course/contentmodules/info.php b/app/views/course/contentmodules/info.php
index 11bf9dc581a79e51a45be3e88692ae369e6f8fa7..93d3ad9cb68e874defd2aaa338fdabb8f8fa6e00 100644
--- a/app/views/course/contentmodules/info.php
+++ b/app/views/course/contentmodules/info.php
@@ -5,27 +5,17 @@
         <div class="main_part">
             <div class="header">
                 <div class="image">
-                    <?
-                    if ($metadata['icon']) {
-                        $icon = $metadata['icon'] instanceof Icon
-                            ? $metadata['icon']->asImagePath()
-                            : Icon::create($plugin->getPluginURL().'/'.$metadata['icon'])->asImagePath();
-                    } else {
-                        $icon = null;
-                    }
-                    if ($icon && !is_a($icon, 'Icon')) {
-                        $icon = Icon::create($icon);
-                    }
-                    ?>
-                    <? if ($icon) : ?>
-                        <?= $icon->asImg(100) ?>
-                    <? endif ?>
+                <? if ($metadata['icon']): ?>
+                    <?= $metadata['icon']->copyWithRole(Icon::ROLE_INFO)->asImg(100) ?>
+                <? endif; ?>
                 </div>
                 <div class="text">
                     <h1><?= htmlReady($metadata['displayname'] ?? $plugin->getPluginName()) ?></h1>
+                <? if (!empty($metadata['summary'])): ?>
                     <strong>
                         <?= htmlReady($metadata['summary']) ?>
                     </strong>
+                <? endif; ?>
                 </div>
             </div>
             <div class="content-modules-controls-vue-app" is="ContentModulesControl" module_id="<?= htmlReady($plugin->getPluginId()) ?>"></div>
diff --git a/lib/classes/PluginAdministration.php b/lib/classes/PluginAdministration.php
index 2732f58e6f8c38421f4b96b5e140b742003ce47d..8ac5fa80fceb8725603dc71cd4e3c0769c13adda 100644
--- a/lib/classes/PluginAdministration.php
+++ b/lib/classes/PluginAdministration.php
@@ -440,12 +440,14 @@ class PluginAdministration
         // get plugin meta data
         $pluginclass = $manifest['pluginclassname'];
         $origin      = $manifest['origin'];
-        $min_version = $manifest['studipMinVersion'];
-        $max_version = $manifest['studipMaxVersion'];
+        $min_version = $manifest['studipMinVersion'] ?? null;
+        $max_version = $manifest['studipMaxVersion'] ?? null;
 
         // check for compatible version
-        if ((isset($min_version) && StudipVersion::olderThan($min_version)) ||
-            (isset($max_version) && StudipVersion::newerThan($max_version))) {
+        if (
+            (isset($min_version) && StudipVersion::olderThan($min_version))
+            || (isset($max_version) && StudipVersion::newerThan($max_version))
+        ) {
             throw new PluginInstallationException(_('Das Plugin ist mit dieser Stud.IP-Version nicht kompatibel.'));
         }
 
@@ -456,7 +458,7 @@ class PluginAdministration
         $pluginregistered = $plugin_manager->getPluginInfo($pluginclass);
 
         if ($pluginregistered) {
-            new PluginInstallationException(_('Das Plugin ist bereits registriert.'));
+            throw new PluginInstallationException(_('Das Plugin ist bereits registriert.'));
         }
 
         // create database schema if needed
diff --git a/lib/models/OERHostOERSI.php b/lib/models/OERHostOERSI.php
index 52e50d35a2b2a335c5316b870b0fae46ce62c6fd..5e539bf04793e1262f34fb18eeb2ed97c2c0ecf7 100644
--- a/lib/models/OERHostOERSI.php
+++ b/lib/models/OERHostOERSI.php
@@ -76,7 +76,7 @@ class OERHostOERSI extends OERHost
                     $material['difficulty_end'] = 12;
                     $material['uri'] = $material_data['_source']['id'];
                     $material['source_url'] = $material_data['_source']['id'];
-                    $material['content_type'] = $material_data['_source']['encoding'][0]['encodingFormat'] ?: '';
+                    $material['content_type'] = $material_data['_source']['encoding'][0]['encodingFormat'] ?? '';
                     $material['license_identifier'] = $this->getLicenseID($material_data['_source']['license']['id']) ?: '';
                     if (!$material['category']) {
                         $material['category'] = $material->autoDetectCategory();
@@ -86,18 +86,23 @@ class OERHostOERSI extends OERHost
                         'front_image_url' => $material_data['_source']['image'] ?? null,
                         'download' => $material_data['_source']['encoding'][0]['contentUrl'] ?: '',
                         'id' => $material_data['_id'],
-                        'organization' => $material_data['_source']['sourceOrganization'][0]['name'] ?: $material_data['_source']['publisher'][0]['name']
+                        'organization' => $material_data['_source']['sourceOrganization'][0]['name'] ?? $material_data['_source']['publisher'][0]['name'] ?? '',
                     ];
                     $material->store();
 
                     //set users:
                     $userdata = [];
-                    foreach ((array) $material_data['_source']['creator'] as $creator) {
-                        $userdata[] = [
-                            'user_id' => md5($creator['name']),
-                            'name' => $creator['name'],
-                            'host_url' => $this['url']
-                        ];
+                    if (
+                        isset($material_data['_source']['creator'])
+                        && is_array($material_data['_source']['creator'])
+                    ) {
+                        foreach ($material_data['_source']['creator'] as $creator) {
+                            $userdata[] = [
+                                'user_id' => md5($creator['name']),
+                                'name' => $creator['name'],
+                                'host_url' => $this['url']
+                            ];
+                        }
                     }
                     $material->setUsers($userdata);
 
diff --git a/lib/plugins/core/StudIPPlugin.class.php b/lib/plugins/core/StudIPPlugin.class.php
index be2c776b2aed2c9903496bb56eac9748715cfd37..ea5c8ff0d97f890acea9f9edafc6242f9a5bd981 100644
--- a/lib/plugins/core/StudIPPlugin.class.php
+++ b/lib/plugins/core/StudIPPlugin.class.php
@@ -95,7 +95,7 @@ abstract class StudIPPlugin
         if (!empty($metadata['description_' . $language])) {
             return $metadata['description_' . $language];
         }
-        $description = $metadata['descriptionlong'] ?? $metadata['description'];
+        $description = $metadata['descriptionlong'] ?? $metadata['description'] ?? '';
 
         if ($this->plugin_info['description_mode'] === 'override_description') {
             return $this->plugin_info['description'];