diff --git a/controllers/copy.php b/controllers/copy.php
index c40e0f46abd5eac7d7ab484ea33defac4c712f16..713d9b9722feed8eff54e5ecde5f3d2c2035378e 100755
--- a/controllers/copy.php
+++ b/controllers/copy.php
@@ -15,12 +15,22 @@ class CopyController extends PluginController
                 "AND " . get_vis_query() . " " .
                 "AND auth_user_md5.perms = 'dozent' " .
             "ORDER BY Vorname, Nachname", _("Lehrendennamen eingeben"), "user_id");
+        $this->semesters = array_reverse(Semester::getAll());
+        $this->semester = UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_SEMESTER_ID
+            ? Semester::find(UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_SEMESTER_ID)
+            : $this->semesters[0];
+    }
+
+    public function semester_start_und_ende_action($semester_id)
+    {
+        $this->semesters = array_reverse(Semester::getAll());
+        $this->semester = Semester::find($semester_id);
     }
 
     public function process_action()
     {
         if (Request::isPost()) {
-            foreach (array("semester_id", "dozent_id", "lock_copied_courses", "cycles", "resource_assignments") as $param) {
+            foreach (array("semester_id", "dozent_id", "lock_copied_courses", "cycles", "resource_assignments", "week_offset", "end_offset") as $param) {
                 $config_name = "COURSECOPY_SETTINGS_".strtoupper($param);
                 UserConfig::get($GLOBALS['user']->id)->store($config_name, Request::get($param));
             }
@@ -128,6 +138,10 @@ class CopyController extends PluginController
                                 $newcycle->setData($cycledate->toArray());
                                 $newcycle->setId($newcycle->getNewId());
                                 $newcycle['seminar_id'] = $newcourse->getId();
+                                $newcycle['week_offset'] = Request::get("week_offset");
+                                $newcycle['end_offset'] = Request::get("end_offset") !== 10000
+                                    ? Request::get("end_offset")
+                                    : floor(($semester['vorles_ende'] - $semester['vorles_beginn']) / (86400 * 7));
                                 $newcycle['mkdate'] = time();
                                 $newcycle['chdate'] = time();
                                 $newcycle->store();
diff --git a/views/copy/info.php b/views/copy/info.php
index b6df41f9cd28083270c6f85c47d18aedfe2a9682..13a3c124499a149e3baa33b12c543a09e26b762b 100755
--- a/views/copy/info.php
+++ b/views/copy/info.php
@@ -6,16 +6,16 @@
 
     <fieldset>
         <legend>
-            <?= _("Kopieroptionen") ?>
+            <?= _("Allgemein") ?>
         </legend>
 
         <label>
             <?= _("In Semester") ?>
-            <select name="semester_id" required>
+            <select name="semester_id" required onChange="var week_offset = jQuery('select[name=week_offset]').val(); var end_offset = jQuery('select[name=end_offset]').val(); jQuery('#semester_start_und_ende').load(STUDIP.URLHelper.getURL('plugins.php/coursecopy/copy/semester_start_und_ende/' + this.value), function () { jQuery('select[name=week_offset]').val(week_offset); jQuery('select[name=end_offset]').val(end_offset); }); ">
                 <option value=""></option>
-                <? foreach (array_reverse(Semester::getAll()) as $semester) : ?>
-                    <option value="<?= htmlReady($semester->getId()) ?>"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_SEMESTER_ID == $semester->getId() ? " selected" : "" ?>>
-                        <?= htmlReady($semester['name']) ?>
+                <? foreach ($semesters as $sem) : ?>
+                    <option value="<?= htmlReady($sem->getId()) ?>"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_SEMESTER_ID == $sem->getId() ? " selected" : "" ?>>
+                        <?= htmlReady($sem['name']) ?>
                     </option>
                 <? endforeach ?>
             </select>
@@ -33,26 +33,39 @@
             }
             echo $qs->render()
             ?>
+
+            <label>
+                <input type="checkbox" name="lock_copied_courses" value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_LOCK_COPIED_COURSES ? " checked" : "" ?>>
+                <?= _('Kopierte Veranstaltungen sperren') ?>
+            </label>
         </label>
 
+    </fieldset>
+
+    <fieldset>
+        <legend>
+            <?= _("Termine") ?>
+        </legend>
+
         <label>
             <input type="checkbox"
                    name="cycles"
-                   onChange="jQuery('#resource_assignments').toggle();"
+                   onChange="jQuery('#resource_assignments, #semester_start_und_ende').toggle();"
                    value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CYCLES ? " checked" : "" ?>>
             <?= _("Regelmäßige Termine mit kopieren") ?>
         </label>
 
+        <div id="semester_start_und_ende" style="<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CYCLES ? "" : "display: none;" ?>">
+            <?= $this->render_partial("copy/semester_start_und_ende.php") ?>
+        </div>
+
         <label id="resource_assignments" style="<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CYCLES ? "" : "display: none;" ?>">
             <input type="checkbox" name="resource_assignments" value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_RESOURCE_ASSIGNMENTS ? " checked" : "" ?>>
             <?= _("Raumbuchungen mit übernehmen") ?>
         </label>
 
-        <label>
-            <input type="checkbox" name="lock_copied_courses" value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_LOCK_COPIED_COURSES ? " checked" : "" ?>>
-            <?= _('Kopierte Veranstaltungen sperren') ?>
-        </label>
     </fieldset>
+
     <div data-dialog-button>
         <?= \Studip\Button::create(_("Kopieren"), "copy", array('onclick' => "return window.confirm('"._("Wirklich kopieren?")."');")) ?>
     </div>
diff --git a/views/copy/semester_start_und_ende.php b/views/copy/semester_start_und_ende.php
new file mode 100644
index 0000000000000000000000000000000000000000..97ffbcaf9e762d1bf7270b28747b7950879e2654
--- /dev/null
+++ b/views/copy/semester_start_und_ende.php
@@ -0,0 +1,28 @@
+<label>
+    <?= _("Startwoche") ?>
+    <select name="week_offset">
+        <? $i = 0 ?>
+        <? while ($semester['vorles_beginn'] + 86400 * 7 * $i < $semester['vorles_ende']) : ?>
+            <option value="<?= $i ?>"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_WEEK_OFFSET == $i ? " checked" : "" ?>>
+                <?= sprintf(_("%s. Semesterwoche (ab %s)"), $i + 1, date("d.m.Y", $semester['vorles_beginn'] + 86400 * 7 * $i)) ?>
+            </option>
+            <? $i++ ?>
+        <? endwhile ?>
+    </select>
+</label>
+
+<label>
+    <?= _("Endwoche") ?>
+    <select name="end_offset">
+        <option value="10000"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_END_OFFSET == 10000 ? " checked" : "" ?>>
+            <?= _("Letzte Semesterwoche") ?>
+        </option>
+        <? $i = floor(($semester['vorles_ende'] - $semester['vorles_beginn']) / (86400 * 7)) - 1 ?>
+        <? while ($i >= 0) : ?>
+            <option value="<?= $i ?>"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_END_OFFSET == $i ? " checked" : "" ?>>
+                <?= sprintf(_("%s. Semesterwoche (ab %s)"), $i + 1, date("d.m.Y", $semester['vorles_beginn'] + 86400 * 7 * $i)) ?>
+            </option>
+            <? $i-- ?>
+        <? endwhile ?>
+    </select>
+</label>
\ No newline at end of file