diff --git a/app/controllers/privacy.php b/app/controllers/privacy.php
index 60d3c33488d7f24fbc7549d0441486894bafdad9..ee1f1574293b6b8ada0736f6e91c871ea0afbec9 100644
--- a/app/controllers/privacy.php
+++ b/app/controllers/privacy.php
@@ -439,7 +439,7 @@ class PrivacyController extends AuthenticatedController
             'content' => [
                 'icon'        => Icon::create('forum2'),
                 'title'       => _('Inhalte'),
-                'description' => _('Dateien, Forum, Wiki, Literaturlisten'),
+                'description' => _('Courseware, Dateien, Forum, Wiki, Literaturlisten'),
             ],
             'quest' => [
                 'icon'        => Icon::create('vote'),
diff --git a/lib/classes/Privacy.php b/lib/classes/Privacy.php
index bb3bcddc60ad9691ac50098e2f798982467f69ee..870e96ba3c8e488a1d96b5690e9a9bf75319a0e2 100644
--- a/lib/classes/Privacy.php
+++ b/lib/classes/Privacy.php
@@ -43,7 +43,20 @@ class Privacy
         'content' => [
             'FileRef',
             'ForumEntry',
-            'WikiPage'
+            'WikiPage',
+            'Courseware\Unit',
+            'Courseware\StructuralElement',
+            'Courserware\StructuralElementComment',
+            'Courserware\StructuralElementFeedback',
+            'Courseware\TaskGroup',
+            'Courseware\TaskFeedback',
+            'Courseware\Bookmark',
+            'Courseware\Container',
+            'Courseware\Block',
+            'Courserware\BlockComment',
+            'Courserware\BlockFeedback',
+            'Courseware\UserDataField',
+            'Courseware\UserProgress'
         ],
         'quest' => [
             'Evaluation',
diff --git a/lib/models/Courseware/Block.php b/lib/models/Courseware/Block.php
index 05d5d45c1b12d984bca1bab4a8e1bc64435a0804..bd0361897dd65c93f11a903f1dc86d032f93f581 100644
--- a/lib/models/Courseware/Block.php
+++ b/lib/models/Courseware/Block.php
@@ -36,7 +36,7 @@ use User;
  * @property \User                            $edit_blocker    belongs_to User
  * @property \Courseware\Container            $container       belongs_to Courseware\Container
  */
-class Block extends \SimpleORMap
+class Block extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -222,4 +222,22 @@ class Block extends \SimpleORMap
 
         return StructuralElement::build($structuralElement, false);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $blocks = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_blocks WHERE owner_id = ? OR editor_id = ?',
+            [$storage->user_id, $storage->user_id]
+        );
+        if ($blocks) {
+            $storage->addTabularData(_('Courseware Blöcke'), 'cw_blocks', $blocks);
+        }
+        
+    }
 }
diff --git a/lib/models/Courseware/BlockComment.php b/lib/models/Courseware/BlockComment.php
index 16f3a73293dc2737386c62bb6e8474041902302b..fc6811120b1c25ae68fd3555636d665993825b01 100644
--- a/lib/models/Courseware/BlockComment.php
+++ b/lib/models/Courseware/BlockComment.php
@@ -23,7 +23,7 @@ use User;
  * @property \User             $user     belongs_to User
  * @property \Courseware\Block $block    belongs_to Courseware\Block
  */
-class BlockComment extends \SimpleORMap
+class BlockComment extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -57,4 +57,21 @@ class BlockComment extends \SimpleORMap
 
         return StructuralElement::build($structuralElement, false);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $comments = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_block_comments WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($comments) {
+            $storage->addTabularData(_('Courseware Block Kommentare'), 'cw_block_comments', $comments);
+        }
+    }
 }
diff --git a/lib/models/Courseware/BlockFeedback.php b/lib/models/Courseware/BlockFeedback.php
index 422577097a1948119fef61ffb93421bfda53769f..21eed5d0a3714d0356e45cfe6d3ac6dcd030930f 100644
--- a/lib/models/Courseware/BlockFeedback.php
+++ b/lib/models/Courseware/BlockFeedback.php
@@ -21,7 +21,7 @@ use User;
  * @property \User             $user      belongs_to User
  * @property \Courseware\Block $block     belongs_to Courseware\Block
  */
-class BlockFeedback extends \SimpleORMap
+class BlockFeedback extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -55,4 +55,21 @@ class BlockFeedback extends \SimpleORMap
 
         return StructuralElement::build($structuralElement, false);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $feedback = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_block_feedbacks WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($feedback) {
+            $storage->addTabularData(_('Courseware Block Feedback'), 'cw_block_feedback', $feedback);
+        }
+    }
 }
diff --git a/lib/models/Courseware/Bookmark.php b/lib/models/Courseware/Bookmark.php
index e11954825cc6d656d78ad9de00cf987b7acd9ca4..ddff953a289bcda05db2c4a159e927a3888760ac 100644
--- a/lib/models/Courseware/Bookmark.php
+++ b/lib/models/Courseware/Bookmark.php
@@ -20,7 +20,7 @@ namespace Courseware;
  * @property \User                         $user       belongs_to User
  * @property \Courseware\StructuralElement $element    belongs_to Courseware\StructuralElement
  */
-class Bookmark extends \SimpleORMap
+class Bookmark extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -62,4 +62,21 @@ class Bookmark extends \SimpleORMap
     {
         return self::findBySQL('user_id = ? ORDER BY chdate', [$user->id]);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $bookmarks = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_bookmarks WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($bookmarks) {
+            $storage->addTabularData(_('Courseware Lesezeichen'), 'cw_bookmarks', $bookmarks);
+        }
+    }
 }
diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php
index 088f53959c44dd5a05d24b5714f80ac83d2e580d..082a9a0176904f136b2ef46c17180b190e11e9ad 100644
--- a/lib/models/Courseware/Container.php
+++ b/lib/models/Courseware/Container.php
@@ -33,7 +33,7 @@ use User;
  * @property \User                                    $edit_blocker          belongs_to User
  * @property \Courseware\StructuralElement            $structural_element    belongs_to Courseware\StructuralElement
  */
-class Container extends \SimpleORMap
+class Container extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -142,4 +142,22 @@ class Container extends \SimpleORMap
 
         return [$blockMap, $newBlockList];
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $containers = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_containers WHERE owner_id = ? OR editor_id = ?',
+            [$storage->user_id, $storage->user_id]
+        );
+        if ($containers) {
+            $storage->addTabularData(_('Courseware Abschnitte'), 'cw_containers', $containers);
+        }
+        
+    }
 }
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php
index deaab1a177c62ac18d0f66da8b9d70bea844e62e..3e405f3b2f01d10710ef3047395dd56dc55a7117 100644
--- a/lib/models/Courseware/StructuralElement.php
+++ b/lib/models/Courseware/StructuralElement.php
@@ -53,7 +53,7 @@ use User;
  * @SuppressWarnings(PHPMD.TooManyPublicMethods)
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  */
-class StructuralElement extends \SimpleORMap
+class StructuralElement extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -1091,4 +1091,22 @@ SQL;
             }
         }
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $structuralElements = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_structural_elements WHERE ? IN (owner_id, editor_id, range_id)',
+            [$storage->user_id]
+        );
+        if ($structuralElements) {
+            $storage->addTabularData(_('Courseware Seiten'), 'cw_structural_elements', $structuralElements);
+        }
+        
+    }
 }
diff --git a/lib/models/Courseware/StructuralElementComment.php b/lib/models/Courseware/StructuralElementComment.php
index e5fbc818a9c98a3c661667c34f61eb1f926431e2..1e046c4d4e798ae6fe104b88251764ce8a51399a 100644
--- a/lib/models/Courseware/StructuralElementComment.php
+++ b/lib/models/Courseware/StructuralElementComment.php
@@ -21,7 +21,7 @@ use User;
  * @property \User                          $user                    belongs_to User
  * @property \Courseware\StructuralElement  $structural_element      belongs_to Courseware\StructuralElement
  */
-class StructuralElementComment extends \SimpleORMap
+class StructuralElementComment extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -39,4 +39,21 @@ class StructuralElementComment extends \SimpleORMap
 
         parent::configure($config);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $comments = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_structural_element_comments WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($comments) {
+            $storage->addTabularData(_('Courseware Seiten Kommentare'), 'cw_structural_element_comments', $comments);
+        }
+    }
 }
diff --git a/lib/models/Courseware/StructuralElementFeedback.php b/lib/models/Courseware/StructuralElementFeedback.php
index a2e3b8b97ab099bb0d6bb7b25cf3f31ee968e842..c7435d06b67c219a38efd2ea499ba8e906bd5b89 100644
--- a/lib/models/Courseware/StructuralElementFeedback.php
+++ b/lib/models/Courseware/StructuralElementFeedback.php
@@ -21,7 +21,7 @@ use User;
  * @property \User                          $user                    belongs_to User
  * @property \Courseware\StructuralElement  $structural_element      belongs_to Courseware\StructuralElement
  */
-class StructuralElementFeedback extends \SimpleORMap
+class StructuralElementFeedback extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -39,4 +39,21 @@ class StructuralElementFeedback extends \SimpleORMap
 
         parent::configure($config);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $feedback = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_structural_element_feedbacks WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($feedback) {
+            $storage->addTabularData(_('Courseware Seiten Feedback'), 'cw_structural_element_feedbacks', $feedback);
+        }
+    }
 }
diff --git a/lib/models/Courseware/TaskFeedback.php b/lib/models/Courseware/TaskFeedback.php
index 57e2ce0705323ff1a603deb5af00f62095816449..987aae9f5c0c4629f86e32a15d81157b026e3391 100644
--- a/lib/models/Courseware/TaskFeedback.php
+++ b/lib/models/Courseware/TaskFeedback.php
@@ -22,7 +22,7 @@ use User;
 * @property \User                          $lecturer               belongs_to User
 * @property \Courseware\Task               $task                   belongs_to Courseware\Task
 */
-class TaskFeedback extends \SimpleORMap
+class TaskFeedback extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -55,4 +55,21 @@ class TaskFeedback extends \SimpleORMap
 
         return StructuralElement::build($structuralElement, false);
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $feedback = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_task_feedbacks WHERE lecturer_id = ?',
+            [$storage->user_id]
+        );
+        if ($feedback) {
+            $storage->addTabularData(_('Courseware Aufgaben Feedback'), 'cw_task_feedbacks', $feedback);
+        }
+    }
 }
diff --git a/lib/models/Courseware/TaskGroup.php b/lib/models/Courseware/TaskGroup.php
index 7ca6eb1fa121d8c205a7327e414edcf24026fb9f..d32866390a935b0569d808bf338e3c5fbd5f4415 100644
--- a/lib/models/Courseware/TaskGroup.php
+++ b/lib/models/Courseware/TaskGroup.php
@@ -25,7 +25,7 @@ use User;
  * @property \Courseware\StructuralElement $structural_element    belongs_to Courseware\StructuralElement
  * @property \SimpleORMapCollection        $tasks                 has_many Courseware\Task
  */
-class TaskGroup extends \SimpleORMap
+class TaskGroup extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -58,4 +58,22 @@ class TaskGroup extends \SimpleORMap
 
         return $solvers;
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $task_groups = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_task_groups WHERE lecturer_id = ?',
+            [$storage->user_id]
+        );
+        if ($task_groups) {
+            $storage->addTabularData(_('Courseware Aufgaben'), 'cw_task_groups', $task_groups);
+        }
+        
+    }
 }
diff --git a/lib/models/Courseware/Unit.php b/lib/models/Courseware/Unit.php
index 5c470c901ff893aa92819151d49a21dad7f58c23..647f9f9fb700632c9c98b1b87bd480f6ea53b595 100644
--- a/lib/models/Courseware/Unit.php
+++ b/lib/models/Courseware/Unit.php
@@ -31,7 +31,7 @@ use User;
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  */
 
-class Unit extends \SimpleORMap
+class Unit extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -110,4 +110,21 @@ class Unit extends \SimpleORMap
 
         return $newUnit;
     }
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $units = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_units WHERE creator_id = ?',
+            [$storage->user_id]
+        );
+        if ($units) {
+            $storage->addTabularData(_('Courseware Lernmaterialien'), 'cw_units', $units);
+        }
+        
+    }
 }
diff --git a/lib/models/Courseware/UserDataField.php b/lib/models/Courseware/UserDataField.php
index 914cab0361511405f3d53bd71d546e296af36da6..af608809acd279f4a959f9442091ba93fa76ce26 100644
--- a/lib/models/Courseware/UserDataField.php
+++ b/lib/models/Courseware/UserDataField.php
@@ -21,7 +21,7 @@ namespace Courseware;
  * @property \Courseware\Block $block    belongs_to Courseware\Block
  * @property \User             $user     belongs_to User
  */
-class UserDataField extends \SimpleORMap
+class UserDataField extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -67,4 +67,21 @@ class UserDataField extends \SimpleORMap
 
         return $userDataField;
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $userData = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_user_data_fields WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($userData) {
+            $storage->addTabularData(_('Courseware Nutzerdaten'), 'cw_user_data_fields', $userData);
+        }
+    }
 }
diff --git a/lib/models/Courseware/UserProgress.php b/lib/models/Courseware/UserProgress.php
index d4355f55454b4085c7e1b2aac94f126b98d5d3f0..195fd89222ba5373c191979ab720f75821d5adf6 100644
--- a/lib/models/Courseware/UserProgress.php
+++ b/lib/models/Courseware/UserProgress.php
@@ -21,7 +21,7 @@ namespace Courseware;
  * @property \Courseware\Block $block    belongs_to Courseware\Block
  * @property \User             $user     belongs_to User
  */
-class UserProgress extends \SimpleORMap
+class UserProgress extends \SimpleORMap implements \PrivacyObject
 {
     protected static function configure($config = [])
     {
@@ -63,4 +63,21 @@ class UserProgress extends \SimpleORMap
 
         return $progress;
     }
+
+    /**
+     * Export available data of a given user into a storage object
+     * (an instance of the StoredUserData class) for that user.
+     *
+     * @param StoredUserData $storage object to store data into
+     */
+    public static function exportUserData(\StoredUserData $storage)
+    {
+        $userProgresses = \DBManager::get()->fetchAll(
+            'SELECT * FROM cw_user_progresses WHERE user_id = ?',
+            [$storage->user_id]
+        );
+        if ($userProgresses) {
+            $storage->addTabularData(_('Courseware Fortschritt'), 'cw_user_progresses', $userProgresses);
+        }
+    }
 }
diff --git a/lib/modules/CoursewareModule.class.php b/lib/modules/CoursewareModule.class.php
index 2a9161ac7277e90aa9c05f18598b90455f52c389..56a205c2f0546c96efaf05ff3306be3ef1af01f4 100644
--- a/lib/modules/CoursewareModule.class.php
+++ b/lib/modules/CoursewareModule.class.php
@@ -3,7 +3,7 @@
 use Courseware\Instance;
 use Courseware\StructuralElement;
 
-class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, PrivacyPlugin
+class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule
 {
     /**
      * {@inheritdoc}
@@ -146,58 +146,6 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule,
         ];
     }
 
-    /**
-     * {@inheritdoc}
-     */
-    public function exportUserData(StoredUserData $storage)
-    {
-        $db = DBManager::get();
-
-        $structuralElements = $db->fetchAll(
-            'SELECT * FROM cw_structural_elements WHERE owner_id = ? OR editor_id = ? OR range_id = ?',
-            [$storage->user_id, $storage->user_id, $storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Strukturelemente-Ergebnisse'), 'cw_structural_elements', $structuralElements);
-
-        $containers = $db->fetchAll(
-            'SELECT * FROM cw_containers WHERE owner_id = ? OR editor_id = ?',
-            [$storage->user_id, $storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Container-Ergebnisse'), 'cw_containers', $containers);
-
-        $blocks = $db->fetchAll(
-            'SELECT * FROM cw_blocks WHERE owner_id = ? OR editor_id = ?',
-            [$storage->user_id, $storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Blöcke-Ergebnisse'), 'cw_blocks', $blocks);
-
-        $comments = $db->fetchAll(
-            'SELECT * FROM cw_block_comments WHERE user_id = ?',
-            [$storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Kommentare-Ergebnisse'), 'cw_block_comments', $comments);
-
-        $userData = $db->fetchAll(
-            'SELECT * FROM cw_user_data_fields WHERE user_id = ?',
-            [$storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Nutzer-Daten-Ergebnisse'), 'cw_user_data_fields', $userData);
-
-        $userProgresses = $db->fetchAll(
-            'SELECT * FROM cw_user_progresses WHERE user_id = ?',
-            [$storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Nutzer-Fortschritt-Ergebnisse'), 'cw_user_progresses', $userProgresses);
-
-        $bookmarks = $db->fetchAll(
-            'SELECT * FROM cw_bookmarks WHERE user_id = ?',
-            [$storage->user_id]
-        );
-        $storage->addTabularData(_('Courseware-Lesezeichen-Ergebnisse'), 'cw_bookmarks', $bookmarks);
-
-
-    }
-
     public function isActivatableForContext(Range $context)
     {
         return $context->getRangeType() === 'course';