diff --git a/app/controllers/contents/courseware.php b/app/controllers/contents/courseware.php
index e509a6bd1ec53ce049fe923bcf5afee49d2a8c3d..fa70db633a94cb1dec4d2687fbc4736ff23e0553 100755
--- a/app/controllers/contents/courseware.php
+++ b/app/controllers/contents/courseware.php
@@ -188,8 +188,10 @@ class Contents_CoursewareController extends AuthenticatedController
         if ($sem_key === '0' || $sem_key === null) {
             $sem_key = 'all';
             $this->all_semesters = true;
+            $this->semesters = Semester::getAll();
         } else {
             $this->all_semesters = false;
+            $this->semesters = [Semester::find($sem_key)];
         }
         $params = [
             'order_by'            => null,
@@ -198,36 +200,109 @@ class Contents_CoursewareController extends AuthenticatedController
             'deputies_enabled'    => Config::get()->DEPUTIES_ENABLE,
         ];
 
-        $sem_courses  = MyRealmModel::getPreparedCourses($sem_key, $params);
+        $this->sem_courses  = $this->getCoursewareCourses($sem_key);
+    }
+
+    /**
+     * Return list of coursewares grouped by semester_id
+     *
+     * @param  string $sem_key  currently selected semester or all (for all semesters)
+     *
+     * @return array
+     */
+    private function getCoursewareCourses($sem_key)
+    {
+        $this->current_semester = Semester::findCurrent();
+
+        $courses = Course::findThru($this->user_id, [
+            'thru_table'        => 'seminar_user',
+            'thru_key'          => 'user_id',
+            'thru_assoc_key'    => 'seminar_id',
+            'assoc_foreign_key' => 'seminar_id'
+        ]);
+
+        if (Config::get()->DEPUTIES_ENABLE) {
+            $deputy_courses = Deputy::findDeputyCourses($GLOBALS['user']->id)->pluck('course');
+            if (!empty($deputy_courses)) {
+                $courses = array_merge($courses, $deputy_courses);
+            }
+        }
 
-        $this->semesters = [];
+        $courses = new SimpleCollection($courses);
 
-        if ($sem_courses) {
-            $i = 0;
-            foreach ($sem_courses as $sem) {
-                $this->semesters[$i]['semester_name'] = array_values($sem)[0]['start_semester'];
-                $this->semesters[$i]['coursewares'] = [];
-                $this->semesters[$i]['empty_courses'] = [];
+        if (!Config::get()->MY_COURSES_ENABLE_STUDYGROUPS) {
+            $courses = $courses->filter(function ($a) {
+                return !$a->isStudygroup();
+            });
+        }
+
+        if ($sem_key != 'all') {
+            $semester = Semester::find($sem_key);
+
+            $courses = $courses->filter(function ($a) use ($semester) {
+                if ($a->isInSemester($semester)) {
+                    return true;
+                }
+                return false;
+            });
+
+            $coursewares = [];
+
+            foreach ($courses as $course) {
+                $element = StructuralElement::getCoursewareCourse($course->id);
+                if (!empty($element) && $this->isCoursewareEnabled($course->id)) {
+                    $element['payload'] = json_decode($element['payload'], true);
+                    $coursewares[] = $element;
+                }
+            }
 
-                foreach ($sem as $cid => $course) {
-                    $element = StructuralElement::getCoursewareCourse($cid);
-                    if($element) {
-                        $element['payload'] = json_decode($element['payload'], true);
-                        array_push($this->semesters[$i]['coursewares'], $element);
+            if (empty($coursewares)) {
+                return [];
+            }
+
+            return [$semester->id => [
+                'semester_name' => $semester->name,
+                'coursewares'   => $coursewares
+            ]];
+        } else {
+            $all_semesters    = Semester::getAll();
+            $sem_courses      = [];
+
+            foreach ($courses as $course) {
+                $element = StructuralElement::getCoursewareCourse($course->id);
+                if (!empty($element) && $this->isCoursewareEnabled($course->id)) {
+                    $element['payload'] = json_decode($element['payload'], true);
+
+                    if ($course->duration_time == -1) {
+                        $sem_courses[$this->current_semester->id]['coursewares'][] = $element;
                     } else {
-                        array_push($this->semesters[$i]['empty_courses'], $course);
+                        $end_semester = $course->getEndSemester();
+                        $sem_courses[$end_semester->id]['coursewares'][] = $element;
                     }
                 }
-                $i++;
             }
-        } else {
-            $semester = Semester::find($sem_key);
-            $this->semesters[0]['semester_name'] = $semester->name;
-            $this->semesters[0]['coursewares'] = [];
-            $this->semesters[0]['empty_courses'] = [];
+
+            return $sem_courses;
         }
     }
 
+    /**
+     * Returns true if the courseware module is enabled for the passed course
+     *
+     * @param  string  $course_id  the course to check
+     * @return boolean             true if courseware is enabled, false otherwise
+     */
+    private function isCoursewareEnabled($course_id)
+    {
+        $studip_module = PluginManager::getInstance()->getPlugin('CoursewareModule');
+
+        if (!$studip_module || !$studip_module->isActivated($course_id)) {
+            return false;
+        }
+
+        return true;
+    }
+
 
     private function getProjects($purpose)
     {
diff --git a/app/views/contents/courseware/courses_overview.php b/app/views/contents/courseware/courses_overview.php
index 7699c08ad5f43e3baa44404621b092cf25b86a92..7ae6cadd4ae4a1445b610be8dd1c9edcda8bfa94 100644
--- a/app/views/contents/courseware/courses_overview.php
+++ b/app/views/contents/courseware/courses_overview.php
@@ -1,9 +1,27 @@
 <div class="cw-content-projects">
+    <? if (empty($sem_courses)) : ?>
+        <? if (!$all_semesters) : ?>
+        <h2>
+            <?= htmlReady($semesters[0]->name) ?>
+            <? if ($current_semester->id == $semesters[0]->id) : ?>
+                (<?= _('Aktuelles Semester') ?> )
+            <? endif ?>
+        </h2>
+        <? endif ?>
+
+        <?= MessageBox::info(_('Keine der Veranstaltungen auf die sie Zugriff '
+            . 'haben hat eine Courseware mit Inhalten.')); ?>
+    <? else : ?>
     <? foreach($semesters as $semester) :?>
-        <h2><?= htmlReady($semester['semester_name']) ?></h2>
-        <? if (!empty($semester['coursewares'])): ?>
+        <? if (!empty($sem_courses[$semester->id]['coursewares'])): ?>
+        <h2>
+            <?= htmlReady($semester->name) ?>
+            <? if ($current_semester->id == $semester->id) : ?>
+                (<?= _('Aktuelles Semester') ?> )
+            <? endif ?>
+        </h2>
         <ul class="cw-tiles">
-            <? foreach($semester['coursewares'] as $element) :?>
+            <? foreach($sem_courses[$semester->id]['coursewares'] as $element) :?>
                 <li class="tile <?= htmlReady($element['payload']['color'])?>">
                     <a href="<?= URLHelper::getLink('dispatch.php/course/courseware/?cid='.$element['range_id'].'#/structural_element/'.$element['id']) ?>">
                         <div class="preview-image" style="background-image: url(<?= htmlReady($element->getImageUrl()) ?>)" ></div>
@@ -23,11 +41,6 @@
             <? endforeach; ?>
         </ul>
         <? endif; ?>
-        <? if (empty($semester['coursewares']) && !empty($empty_courses)): ?>
-            <?= MessageBox::info(_('Es wurden noch keine Lernunterlagen angelegt.')); ?>
-        <? endif; ?>
-        <? if (empty($semester['coursewares']) && empty($empty_courses)): ?>
-            <?= MessageBox::info(_('Es wurden keine Veranstaltungen gefunden.')); ?>
-        <? endif; ?> 
     <? endforeach; ?>
+    <? endif; ?>
 </div>