diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java
index 942e107b88db823c24f8d2685c2cb3fc7f7c92ce..e711d18d0d5ad4135f3d5a2b062de1f52c23b5b1 100644
--- a/src/main/java/org/olat/course/PersistingCourseImpl.java
+++ b/src/main/java/org/olat/course/PersistingCourseImpl.java
@@ -29,6 +29,7 @@ import java.io.File;
 import java.io.Serializable;
 
 import org.olat.admin.quota.QuotaConstants;
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.id.IdentityEnvironment;
@@ -63,6 +64,7 @@ import org.olat.course.run.environment.CourseEnvironmentImpl;
 import org.olat.course.tree.CourseEditorTreeModel;
 import org.olat.course.tree.CourseEditorTreeNode;
 import org.olat.modules.glossary.GlossaryManager;
+import org.olat.modules.reminder.ReminderService;
 import org.olat.modules.sharedfolder.SharedFolderManager;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryImportExport;
@@ -375,6 +377,10 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ
 		//  pro increased transaction timeout: would fix OLAT-5368 but only move the problem
 		//@TODO OLAT-2597: real solution is a long-running background-task concept...
 		DBFactory.getInstance().intermediateCommit();
+		
+		//export reminders
+		CoreSpringFactory.getImpl(ReminderService.class)
+			.exportReminders(myRE, fExportedDataDir);
 
 		log.info("exportToFilesystem: exporting course "+this+" to "+exportDirectory+" done.");
 		log.info("finished export course '"+getCourseTitle()+"' in t="+Long.toString(System.currentTimeMillis()-s));
diff --git a/src/main/java/org/olat/course/nodes/gta/rule/AssignTaskRuleSPI.java b/src/main/java/org/olat/course/nodes/gta/rule/AssignTaskRuleSPI.java
index 6d8feebbe2720f62d3ef3a14ab120dba887b9d6b..03716a7e7f22b01555bc4323be5337fec643771e 100644
--- a/src/main/java/org/olat/course/nodes/gta/rule/AssignTaskRuleSPI.java
+++ b/src/main/java/org/olat/course/nodes/gta/rule/AssignTaskRuleSPI.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.GTACourseNode;
 import org.olat.course.nodes.gta.ui.BeforeDateTaskRuleEditor;
 import org.olat.modules.ModuleConfiguration;
@@ -56,6 +57,12 @@ public class AssignTaskRuleSPI extends AbstractDueDateTaskRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new BeforeDateTaskRuleEditor(rule, entry, AssignTaskRuleSPI.class.getSimpleName());
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		//node ident must be the same
+		return rule.clone();
+	}
 
 	@Override
 	protected Date getDueDate(GTACourseNode gtaNode) {
diff --git a/src/main/java/org/olat/course/nodes/gta/rule/SubmissionTaskRuleSPI.java b/src/main/java/org/olat/course/nodes/gta/rule/SubmissionTaskRuleSPI.java
index 326c05d16b11bf6e5ab381fc550396ab354dcaa5..65fc25feb01c810dccc589b3546f2085515974d6 100644
--- a/src/main/java/org/olat/course/nodes/gta/rule/SubmissionTaskRuleSPI.java
+++ b/src/main/java/org/olat/course/nodes/gta/rule/SubmissionTaskRuleSPI.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.GTACourseNode;
 import org.olat.course.nodes.gta.GTAManager;
 import org.olat.course.nodes.gta.ui.BeforeDateTaskRuleEditor;
@@ -67,6 +68,12 @@ public class SubmissionTaskRuleSPI extends AbstractDueDateTaskRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new BeforeDateTaskRuleEditor(rule, entry, SubmissionTaskRuleSPI.class.getSimpleName());
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		// node ident must be the same
+		return rule.clone();
+	}
 
 	@Override
 	protected Date getDueDate(GTACourseNode gtaNode) {
diff --git a/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java b/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java
index ee603df759c62b513290b61be0034723553992bf..bc7d744c91d7a35ea2676d40a19933806cf6f5e9 100644
--- a/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java
+++ b/src/main/java/org/olat/course/reminder/rule/AttemptsRuleSPI.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.olat.core.id.Identity;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.reminder.manager.ReminderRuleDAO;
 import org.olat.course.reminder.ui.AttemptsRuleEditor;
@@ -63,6 +64,12 @@ public class AttemptsRuleSPI implements FilterRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new AttemptsRuleEditor(rule, entry);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		//the node ident must be the same
+		return rule.clone();
+	}
 
 	@Override
 	public void filter(RepositoryEntry entry, List<Identity> identities, ReminderRule rule) {
diff --git a/src/main/java/org/olat/course/reminder/rule/InitialAttemptsRuleSPI.java b/src/main/java/org/olat/course/reminder/rule/InitialAttemptsRuleSPI.java
index aa0645bde879a5e11187db3cbc5f3f9a26d29aff..eb8c5e1640c093454899af23267a1fa761d60b9d 100644
--- a/src/main/java/org/olat/course/reminder/rule/InitialAttemptsRuleSPI.java
+++ b/src/main/java/org/olat/course/reminder/rule/InitialAttemptsRuleSPI.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.olat.core.id.Identity;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.reminder.manager.ReminderRuleDAO;
 import org.olat.course.reminder.ui.InitialAttemptsRuleEditor;
@@ -63,6 +64,11 @@ public class InitialAttemptsRuleSPI extends AbstractLaunchDateRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new InitialAttemptsRuleEditor(rule, entry);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	protected Map<Long, Date> getLaunchDates(ReminderRule rule, RepositoryEntry entry, List<Identity> identities) {
diff --git a/src/main/java/org/olat/course/reminder/rule/PassedRuleSPI.java b/src/main/java/org/olat/course/reminder/rule/PassedRuleSPI.java
index 49672fdb5266f8f9990b02fb9477dfe950f39f10..d365bbe40e0a5a475e85b5d2e59fb47abbb059f6 100644
--- a/src/main/java/org/olat/course/reminder/rule/PassedRuleSPI.java
+++ b/src/main/java/org/olat/course/reminder/rule/PassedRuleSPI.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.olat.core.id.Identity;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.reminder.manager.ReminderRuleDAO;
 import org.olat.course.reminder.ui.PassedRuleEditor;
@@ -63,6 +64,11 @@ public class PassedRuleSPI implements FilterRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new PassedRuleEditor(rule, entry);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	public void filter(RepositoryEntry entry, List<Identity> identities, ReminderRule rule) {
diff --git a/src/main/java/org/olat/course/reminder/rule/ScoreRuleSPI.java b/src/main/java/org/olat/course/reminder/rule/ScoreRuleSPI.java
index 5e3d53b8cedb90f8f12645edfcb607bd9a791762..bf1290ccefd13c1e0e022c84ef900d4a9ce21249 100644
--- a/src/main/java/org/olat/course/reminder/rule/ScoreRuleSPI.java
+++ b/src/main/java/org/olat/course/reminder/rule/ScoreRuleSPI.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.olat.core.id.Identity;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.reminder.manager.ReminderRuleDAO;
 import org.olat.course.reminder.ui.ScoreRuleEditor;
@@ -65,6 +66,11 @@ public class ScoreRuleSPI implements FilterRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new ScoreRuleEditor(rule, entry);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	public void filter(RepositoryEntry entry, List<Identity> identities, ReminderRule rule) {
diff --git a/src/main/java/org/olat/course/reminder/ui/CourseReminderEditController.java b/src/main/java/org/olat/course/reminder/ui/CourseReminderEditController.java
index 46dd6dfec49433aabce4a34d9a0994a3f129d3ee..8ec2df8c7352312e8143f5f4c00b275b2f3fe5e6 100644
--- a/src/main/java/org/olat/course/reminder/ui/CourseReminderEditController.java
+++ b/src/main/java/org/olat/course/reminder/ui/CourseReminderEditController.java
@@ -145,8 +145,7 @@ public class CourseReminderEditController extends FormBasicController {
 		formLayout.add(contentCont);
 		
 		String emailContent = reminder == null ? null : reminder.getEmailBody();
-		//TODO
-		if(StringHelper.containsNonWhitespace(emailContent)) {
+		if(!StringHelper.containsNonWhitespace(emailContent)) {
 			emailContent = translate("reminder.def.body");
 		}
 		emailEl = uifactory.addRichTextElementForStringDataMinimalistic("email.content", "email.content", emailContent, 10, 60, contentCont, getWindowControl());
diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java
index d03b6785982c4f900c7c9a999eb7c6ab337c55c1..bc687eb2cc5dee539ea55569b3d84e513bade90c 100644
--- a/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java
+++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTIHandler.java
@@ -107,7 +107,7 @@ public abstract class QTIHandler extends FileHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		//getFileResource search the first zip
diff --git a/src/main/java/org/olat/modules/reminder/ReminderRule.java b/src/main/java/org/olat/modules/reminder/ReminderRule.java
index 63c5596224ce2f3731124b43f4b1624c0ba8a510..9f9c2204822ee366366e9fa1c5a5b99fd89c6cae 100644
--- a/src/main/java/org/olat/modules/reminder/ReminderRule.java
+++ b/src/main/java/org/olat/modules/reminder/ReminderRule.java
@@ -19,14 +19,17 @@
  */
 package org.olat.modules.reminder;
 
+
 /**
  * 
  * Initial date: 07.04.2015<br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public interface ReminderRule {
+public interface ReminderRule extends Cloneable {
 	
 	public String getType();
+	
+	public ReminderRule clone();
 
 }
diff --git a/src/main/java/org/olat/modules/reminder/ReminderService.java b/src/main/java/org/olat/modules/reminder/ReminderService.java
index d268025f77611dfc478e28c67664074b6ffb3ddb..e6c2cb964b5f9ba55a282b6c278be152d74999a2 100644
--- a/src/main/java/org/olat/modules/reminder/ReminderService.java
+++ b/src/main/java/org/olat/modules/reminder/ReminderService.java
@@ -19,6 +19,7 @@
  */
 package org.olat.modules.reminder;
 
+import java.io.File;
 import java.util.List;
 
 import org.olat.core.id.Identity;
@@ -35,6 +36,8 @@ import org.olat.repository.RepositoryEntryRef;
  *
  */
 public interface ReminderService {
+
+	public static final String REMINDERS_XML = "Reminders.xml";
 	
 	/**
 	 * Create a non-persisted reminder.
@@ -47,6 +50,8 @@ public interface ReminderService {
 	
 	public Reminder loadByKey(Long key);
 	
+	public List<Reminder> getReminders(RepositoryEntryRef entry);
+	
 	public List<ReminderInfos> getReminderInfos(RepositoryEntryRef entry);
 	
 	public Reminder duplicate(Reminder toCopy);
@@ -80,5 +85,15 @@ public interface ReminderService {
 	public String toXML(ReminderRules rules);
 	
 	public ReminderRules toRules(String rulesXml);
+	
+	public void exportReminders(RepositoryEntry entry, File fExportedDataDir);
+	
+	/**
+	 * The reminders are not persisted and not converted to any new course, group...
+	 * 
+	 * @param fExportedDataDir
+	 * @return
+	 */
+	public List<Reminder> importRawReminders(Identity creator, RepositoryEntry newEntry, File fExportedDataDir);
 
 }
diff --git a/src/main/java/org/olat/modules/reminder/RuleSPI.java b/src/main/java/org/olat/modules/reminder/RuleSPI.java
index 97d522d70b2dc7e88bcc49b5ae52eb72475af479..8f876da9955491f0b9290678b2aefec67041107f 100644
--- a/src/main/java/org/olat/modules/reminder/RuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/RuleSPI.java
@@ -19,6 +19,7 @@
  */
 package org.olat.modules.reminder;
 
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.repository.RepositoryEntry;
 
 /**
@@ -33,6 +34,8 @@ public interface RuleSPI {
 	
 	public String getCategory();
 	
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper);
+	
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry);
 
 }
diff --git a/src/main/java/org/olat/modules/reminder/manager/ReminderServiceImpl.java b/src/main/java/org/olat/modules/reminder/manager/ReminderServiceImpl.java
index f43194ba37b4bc08067a86e814f64a3f313b00dc..b4edfa7e3258bfd30f449b8d7e3ac146ad6659d4 100644
--- a/src/main/java/org/olat/modules/reminder/manager/ReminderServiceImpl.java
+++ b/src/main/java/org/olat/modules/reminder/manager/ReminderServiceImpl.java
@@ -19,7 +19,13 @@
  */
 package org.olat.modules.reminder.manager;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
@@ -45,6 +51,8 @@ import org.olat.modules.reminder.Reminder;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.ReminderService;
 import org.olat.modules.reminder.SentReminder;
+import org.olat.modules.reminder.model.ImportExportReminder;
+import org.olat.modules.reminder.model.ImportExportReminders;
 import org.olat.modules.reminder.model.ReminderImpl;
 import org.olat.modules.reminder.model.ReminderInfos;
 import org.olat.modules.reminder.model.ReminderRuleImpl;
@@ -72,8 +80,11 @@ public class ReminderServiceImpl implements ReminderService {
 	static {
 		ruleXStream.alias("rule", org.olat.modules.reminder.model.ReminderRuleImpl.class);
 		ruleXStream.alias("rules", org.olat.modules.reminder.model.ReminderRules.class);
+		ruleXStream.alias("reminders", org.olat.modules.reminder.model.ImportExportReminders.class);
+		ruleXStream.alias("reminder", org.olat.modules.reminder.model.ImportExportReminder.class);
 	}
 	
+	
 	@Autowired
 	private ReminderDAO reminderDao;
 	@Autowired
@@ -126,6 +137,11 @@ public class ReminderServiceImpl implements ReminderService {
 		return reminderDao.loadByKey(key);
 	}
 	
+	@Override
+	public List<Reminder> getReminders(RepositoryEntryRef entry) {
+		return reminderDao.getReminders(entry);
+	}
+
 	@Override
 	public List<ReminderInfos> getReminderInfos(RepositoryEntryRef entry) {
 		return reminderDao.getReminderInfos(entry);
@@ -161,6 +177,45 @@ public class ReminderServiceImpl implements ReminderService {
 		return (ReminderRules)ruleXStream.fromXML(rulesXml);
 	}
 	
+	@Override
+	public void exportReminders(RepositoryEntry entry, File fExportedDataDir) {
+		List<Reminder> reminders = reminderDao.getReminders(entry);
+		if(reminders.size() > 0) {
+			try (OutputStream fOut = new FileOutputStream(new File(fExportedDataDir, REMINDERS_XML))) {
+				ImportExportReminders exportReminders = new ImportExportReminders();
+				for(Reminder reminder:reminders) {
+					ImportExportReminder exportReminder = new ImportExportReminder(reminder);
+					exportReminders.getReminders().add(exportReminder);
+				}
+				ruleXStream.toXML(exportReminders, fOut);
+			} catch(Exception e) {
+				log.error("", e);
+			}
+		}
+	}
+
+	@Override
+	public List<Reminder> importRawReminders(Identity creator, RepositoryEntry newEntry, File fExportedDataDir) {
+		File reminderFile = new File(fExportedDataDir, REMINDERS_XML);
+		List<Reminder> reminders = new ArrayList<>();
+		if(reminderFile.exists()) {
+			try(InputStream in = new FileInputStream(reminderFile)) {
+				ImportExportReminders importReminders = (ImportExportReminders)ruleXStream.fromXML(in);
+				List<ImportExportReminder> importReminderList = importReminders.getReminders();
+				for(ImportExportReminder importReminder:importReminderList) {
+					Reminder reminder = reminderDao.createReminder(newEntry, creator);
+					reminder.setDescription(importReminder.getDescription());
+					reminder.setEmailBody(importReminder.getEmailBody());	
+					reminder.setConfiguration(importReminder.getConfiguration());
+					reminders.add(reminder);
+				}
+			} catch(Exception e) {
+				log.error("", e);
+			}
+		}
+		return reminders;
+	}
+
 	@Override
 	public void remindAll() {
 		Date now = new Date();
diff --git a/src/main/java/org/olat/modules/reminder/model/ImportExportReminder.java b/src/main/java/org/olat/modules/reminder/model/ImportExportReminder.java
new file mode 100644
index 0000000000000000000000000000000000000000..48b21dc393791124f8605089207918b4bd9d44cf
--- /dev/null
+++ b/src/main/java/org/olat/modules/reminder/model/ImportExportReminder.java
@@ -0,0 +1,74 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.reminder.model;
+
+import java.io.Serializable;
+
+import org.olat.modules.reminder.Reminder;
+
+/**
+ * 
+ * Initial date: 12.05.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ImportExportReminder implements Serializable {
+
+	private static final long serialVersionUID = -6548172969534189234L;
+	
+	private String description;
+	private String configuration;
+	private String emailBody;
+	
+	public ImportExportReminder() {
+		//
+	}
+	
+	public ImportExportReminder(Reminder reminder) {
+		description = reminder.getDescription();
+		configuration = reminder.getConfiguration();
+		emailBody = reminder.getEmailBody();
+	}
+	
+	public String getDescription() {
+		return description;
+	}
+	
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	public String getConfiguration() {
+		return configuration;
+	}
+	
+	public void setConfiguration(String configuration) {
+		this.configuration = configuration;
+	}
+	
+	public String getEmailBody() {
+		return emailBody;
+	}
+	
+	public void setEmailBody(String emailBody) {
+		this.emailBody = emailBody;
+	}
+
+}
diff --git a/src/main/java/org/olat/modules/reminder/model/ImportExportReminders.java b/src/main/java/org/olat/modules/reminder/model/ImportExportReminders.java
new file mode 100644
index 0000000000000000000000000000000000000000..434e29af01ca048bc2777f9f6fc44b891fdfe2dd
--- /dev/null
+++ b/src/main/java/org/olat/modules/reminder/model/ImportExportReminders.java
@@ -0,0 +1,51 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.reminder.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 
+ * Initial date: 12.05.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ImportExportReminders implements Serializable {
+
+	private static final long serialVersionUID = -7591298715271752339L;
+	private List<ImportExportReminder> reminders;
+
+	public ImportExportReminders() {
+		//
+	}
+
+	public List<ImportExportReminder> getReminders() {
+		if(reminders == null) {
+			reminders = new ArrayList<>();
+		}
+		return reminders;
+	}
+
+	public void setReminders(List<ImportExportReminder> reminders) {
+		this.reminders = reminders;
+	}
+}
diff --git a/src/main/java/org/olat/modules/reminder/model/ReminderRuleImpl.java b/src/main/java/org/olat/modules/reminder/model/ReminderRuleImpl.java
index 78f30480e5bf848ca634f67e3546a20c80a97c1b..96050d9e65cbb1f357726c89f974735dc9f643aa 100644
--- a/src/main/java/org/olat/modules/reminder/model/ReminderRuleImpl.java
+++ b/src/main/java/org/olat/modules/reminder/model/ReminderRuleImpl.java
@@ -75,4 +75,15 @@ public class ReminderRuleImpl implements ReminderRule {
 	public void setRightUnit(String rightUnit) {
 		this.rightUnit = rightUnit;
 	}
+	
+	@Override
+	public ReminderRule clone() {
+		ReminderRuleImpl clone = new ReminderRuleImpl();
+		clone.type = type;
+		clone.leftOperand = leftOperand;
+		clone.operator = operator;
+		clone.rightOperand = rightOperand;
+		clone.rightUnit = rightUnit;
+		return clone;
+	}
 }
diff --git a/src/main/java/org/olat/modules/reminder/rule/BusinessGroupRoleRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/BusinessGroupRoleRuleSPI.java
index c869ec73b6a7c79904f614efac3a72a4d47043ea..f2fbcbb696c6da301c93e0f62ecaed31d2b8cacd 100644
--- a/src/main/java/org/olat/modules/reminder/rule/BusinessGroupRoleRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/BusinessGroupRoleRuleSPI.java
@@ -25,9 +25,11 @@ import java.util.List;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.group.BusinessGroupRef;
 import org.olat.group.manager.BusinessGroupRelationDAO;
 import org.olat.group.model.BusinessGroupRefImpl;
+import org.olat.group.model.BusinessGroupReference;
 import org.olat.modules.reminder.IdentitiesProviderRuleSPI;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.RuleEditorFragment;
@@ -63,6 +65,25 @@ public class BusinessGroupRoleRuleSPI implements IdentitiesProviderRuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new BusinessGroupRoleEditor(rule, entry);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		ReminderRuleImpl clone = (ReminderRuleImpl)rule.clone();
+		String groupKey = clone.getRightOperand();
+		
+		boolean found = false;
+		if(StringHelper.isLong(groupKey)) {
+			Long key = Long.parseLong(groupKey);
+			for(BusinessGroupReference ref:envMapper.getGroups()) {
+				if(key.equals(ref.getOriginalKey()) && ref.getKey() != null) {
+					clone.setRightOperand(ref.getKey().toString());
+					found = true;
+				}
+			}
+		}
+		
+		return found ? clone : null;
+	}
 
 	@Override
 	public List<Identity> evaluate(RepositoryEntry entry, ReminderRule rule) {
diff --git a/src/main/java/org/olat/modules/reminder/rule/CourseEnrollmentDateRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/CourseEnrollmentDateRuleSPI.java
index aa8915d60b2513162c010397366ffa1915a37dc1..42913e8d3449235eaa515573355c710169ea33c9 100644
--- a/src/main/java/org/olat/modules/reminder/rule/CourseEnrollmentDateRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/CourseEnrollmentDateRuleSPI.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.olat.core.id.Identity;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.manager.ReminderDAO;
 import org.olat.repository.RepositoryEntry;
@@ -46,6 +47,11 @@ public class CourseEnrollmentDateRuleSPI extends AbstractLaunchDateRuleSPI {
 	public String getLabelI18nKey() {
 		return "rule.course.enrollment.date";
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	protected Map<Long, Date> getLaunchDates(ReminderRule rule, RepositoryEntry entry, List<Identity> identities) {
diff --git a/src/main/java/org/olat/modules/reminder/rule/DateRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/DateRuleSPI.java
index 40cdf3c009b89b1fcad5ef7d9eea46ec79b25166..f2f72b8f2f455c41a404d9325592bbfd3af97302 100644
--- a/src/main/java/org/olat/modules/reminder/rule/DateRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/DateRuleSPI.java
@@ -26,6 +26,7 @@ import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.RuleEditorFragment;
 import org.olat.modules.reminder.RuleSPI;
@@ -62,6 +63,11 @@ public class DateRuleSPI implements RuleSPI {
 		return new DateRuleEditor(rule);
 	}
 	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
+	
 	public boolean evaluate(ReminderRule rule) {
 		boolean allOk = true;
 		
diff --git a/src/main/java/org/olat/modules/reminder/rule/InitialCourseLaunchRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/InitialCourseLaunchRuleSPI.java
index 33a8951b8d9095bf2e67e8457c6e72554997a9a0..49c7ae721495ca2e258deab013b2466b87f72845 100644
--- a/src/main/java/org/olat/modules/reminder/rule/InitialCourseLaunchRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/InitialCourseLaunchRuleSPI.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +47,11 @@ public class InitialCourseLaunchRuleSPI extends AbstractLaunchDateRuleSPI {
 	public String getLabelI18nKey() {
 		return "rule.initial.course.launch.date";
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	protected Map<Long, Date> getLaunchDates(ReminderRule rule, RepositoryEntry entry, List<Identity> identities) {
diff --git a/src/main/java/org/olat/modules/reminder/rule/RecentCourseLaunchRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/RecentCourseLaunchRuleSPI.java
index 52754bfc237488a48926bd055674549efece2895..ac2944ef155be7ee74c19dfe44ebc51d203d3e49 100644
--- a/src/main/java/org/olat/modules/reminder/rule/RecentCourseLaunchRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/RecentCourseLaunchRuleSPI.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,6 +52,11 @@ public class RecentCourseLaunchRuleSPI extends AbstractLaunchDateRuleSPI {
 	public String getCategory() {
 		return "general";
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	protected Map<Long, Date> getLaunchDates(ReminderRule rule, RepositoryEntry entry, List<Identity> identities) {
diff --git a/src/main/java/org/olat/modules/reminder/rule/RepositoryEntryRoleRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/RepositoryEntryRoleRuleSPI.java
index 236ef2f3f0d1f0fbad62e20c472f577d7ee3f401..86c52908a8149e73774260625f1d119599acacca 100644
--- a/src/main/java/org/olat/modules/reminder/rule/RepositoryEntryRoleRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/RepositoryEntryRoleRuleSPI.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.IdentitiesProviderRuleSPI;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.RuleEditorFragment;
@@ -62,6 +63,11 @@ public class RepositoryEntryRoleRuleSPI implements IdentitiesProviderRuleSPI  {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new RepositoryEntryRoleEditor(rule);
 	}
+	
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
 
 	@Override
 	public List<Identity> evaluate(RepositoryEntry entry, ReminderRule rule) {
diff --git a/src/main/java/org/olat/modules/reminder/rule/UserPropertyRuleSPI.java b/src/main/java/org/olat/modules/reminder/rule/UserPropertyRuleSPI.java
index de037aea84f234c4a8f5a42149130d0c9c77781b..69017853fb30e9c602af82eebe74c6da53a91b06 100644
--- a/src/main/java/org/olat/modules/reminder/rule/UserPropertyRuleSPI.java
+++ b/src/main/java/org/olat/modules/reminder/rule/UserPropertyRuleSPI.java
@@ -20,6 +20,7 @@
 package org.olat.modules.reminder.rule;
 
 import org.olat.core.id.Identity;
+import org.olat.course.export.CourseEnvironmentMapper;
 import org.olat.modules.reminder.ReminderRule;
 import org.olat.modules.reminder.RuleEditorFragment;
 import org.olat.modules.reminder.RuleSPI;
@@ -53,7 +54,12 @@ public class UserPropertyRuleSPI implements RuleSPI {
 	public RuleEditorFragment getEditorFragment(ReminderRule rule, RepositoryEntry entry) {
 		return new UserPropertyEditor(rule);
 	}
-	
+
+	@Override
+	public ReminderRule clone(ReminderRule rule, CourseEnvironmentMapper envMapper) {
+		return rule.clone();
+	}
+
 	public boolean accept(ReminderRule rule, Identity identity) {
 		boolean allOk = false;
 		if(rule instanceof ReminderRuleImpl) {
diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java
index 5aad2425bea51f553f34566d1cfedfd9404c93f6..989d07fd05c79b21cc387734ed37af68b2dcc373 100644
--- a/src/main/java/org/olat/repository/handlers/BlogHandler.java
+++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java
@@ -118,7 +118,7 @@ public class BlogHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		FeedManager.getInstance().copy(sourceResource, targetResource);
diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java
index e7859d63f0d2236078ef8a216d3918aa4c980691..66d898da5f05abe522903e04b2089b144f000d6e 100644
--- a/src/main/java/org/olat/repository/handlers/CourseHandler.java
+++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java
@@ -33,6 +33,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
+import java.util.List;
 import java.util.Locale;
 import java.util.UUID;
 
@@ -94,6 +95,12 @@ import org.olat.fileresource.types.GlossaryResource;
 import org.olat.fileresource.types.ResourceEvaluation;
 import org.olat.fileresource.types.SharedFolderFileResource;
 import org.olat.modules.glossary.GlossaryManager;
+import org.olat.modules.reminder.Reminder;
+import org.olat.modules.reminder.ReminderModule;
+import org.olat.modules.reminder.ReminderRule;
+import org.olat.modules.reminder.ReminderService;
+import org.olat.modules.reminder.RuleSPI;
+import org.olat.modules.reminder.model.ReminderRules;
 import org.olat.modules.sharedfolder.SharedFolderManager;
 import org.olat.repository.ErrorList;
 import org.olat.repository.RepositoryEntry;
@@ -290,6 +297,9 @@ public class CourseHandler implements RepositoryHandler {
 			re = imp.importContent(re, getMediaContainer(re));
 		}
 		
+		//import reminders
+		importReminders(re, fImportBaseDirectory, envMapper, initialAuthor);
+		
 		//clean up export folder
 		cleanExportAfterImport(fImportBaseDirectory);
 		
@@ -380,6 +390,29 @@ public class CourseHandler implements RepositoryHandler {
 		}
 	}
 	
+	private void importReminders(RepositoryEntry re, File fImportBaseDirectory, CourseEnvironmentMapper envMapper, Identity initialAuthor) {
+		ReminderModule reminderModule = CoreSpringFactory.getImpl(ReminderModule.class);
+		ReminderService reminderService = CoreSpringFactory.getImpl(ReminderService.class);
+		List<Reminder> reminders = reminderService.importRawReminders(initialAuthor, re, fImportBaseDirectory);
+		if(reminders.size() > 0) {
+			for(Reminder reminder:reminders) {
+				ReminderRules clonedRules = new ReminderRules();
+				String configuration = reminder.getConfiguration();
+				ReminderRules rules = reminderService.toRules(configuration);
+				for(ReminderRule rule:rules.getRules()) {
+					RuleSPI ruleSpi = reminderModule.getRuleSPIByType(rule.getType());
+					if(ruleSpi != null) {
+						ReminderRule clonedRule = ruleSpi.clone(rule, envMapper);
+						clonedRules.getRules().add(clonedRule);
+					}
+				}
+				String convertedConfiguration = reminderService.toXML(clonedRules);
+				reminder.setConfiguration(convertedConfiguration);
+				reminderService.save(reminder);
+			}
+		}
+	}
+	
 	private void markDirtyNewRecursively(CourseEditorTreeNode editorRootNode) {
 		editorRootNode.setDirty(true);
 		editorRootNode.setNewnode(true);
@@ -391,7 +424,7 @@ public class CourseHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		final OLATResource sourceResource = source.getOlatResource();
 		final OLATResource targetResource = target.getOlatResource();
 		
@@ -414,8 +447,35 @@ public class CourseHandler implements RepositoryHandler {
 		course = CourseFactory.loadCourse(cgm.getCourseResource());
 		course.postCopy(envMapper, sourceCourse);
 		
+		cloneReminders(author, envMapper, source, target);
+		
 		return target;
 	}
+	
+	private void cloneReminders(Identity author, CourseEnvironmentMapper envMapper, RepositoryEntry source, RepositoryEntry target) {
+		ReminderModule reminderModule = CoreSpringFactory.getImpl(ReminderModule.class);
+		ReminderService reminderService = CoreSpringFactory.getImpl(ReminderService.class);
+		List<Reminder> reminders = reminderService.getReminders(source);
+		
+		for(Reminder reminder:reminders) {
+			String configuration = reminder.getConfiguration();
+			ReminderRules rules = reminderService.toRules(configuration);
+			ReminderRules clonedRules = new ReminderRules();
+			for(ReminderRule rule:rules.getRules()) {
+				RuleSPI ruleSpi = reminderModule.getRuleSPIByType(rule.getType());
+				if(ruleSpi != null) {
+					ReminderRule clonedRule = ruleSpi.clone(rule, envMapper);
+					clonedRules.getRules().add(clonedRule);
+				}
+			}
+
+			Reminder clonedReminder = reminderService.createReminder(target, author);
+			clonedReminder.setDescription(reminder.getDescription());
+			clonedReminder.setEmailBody(reminder.getEmailBody());
+			clonedReminder.setConfiguration(reminderService.toXML(clonedRules));
+			reminderService.save(clonedReminder);
+		}
+	}
 
 	@Override
 	public String getSupportedType() {
diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
index bcd22dfa07bea7107eae5a56322ed41085c3d634..c864bdce0771e163a7074b3f5b376a6de7258eea 100644
--- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
@@ -130,7 +130,7 @@ public class GlossaryHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		File sourceFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(sourceResource).getBasefile();
diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
index bf28e2e1097136e1b29c400eb6761b957f74edb4..952e8cc76401b606cc0e3d1814788d8ad4b9f224 100644
--- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
@@ -138,7 +138,7 @@ public class ImsCPHandler extends FileHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		final CPManager cpManager = CPManager.getInstance();
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
index 2d29046bc89e7f76d417847c3c62f3af260b3a61..6513dc7dc23124bb169cb30e5cb4b3cafd532a2b 100644
--- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
@@ -118,7 +118,7 @@ public class PodcastHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		FeedManager.getInstance().copy(sourceResource, targetResource);
diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
index 7031582cb6ad9f540cdb873d7bf92a2f32647406..fcf427f7e3c6b4acf0b806a774a68b51392d5a4a 100644
--- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
@@ -139,7 +139,7 @@ public class PortfolioHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
index 199b61c23b48e67dc021d5025b1473891ad708db..daeda3195e91257fd4c8c693c70334df08e9ef06 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
@@ -106,7 +106,7 @@ public interface RepositoryHandler {
 	 * @param target
 	 * @return
 	 */
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target);
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target);
 	
 	
 	
diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
index f70b8ce78d8ba656bf589f50b03fcce4bc125a6d..2db8c9c36e4fce711b92feeceb013c97c4bf075d 100644
--- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
@@ -114,7 +114,7 @@ public class SCORMCPHandler extends FileHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		final ScormMainManager scormManager = ScormMainManager.getInstance();
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
index 2c10db3e56827fe69be2d01c3932f8dcbef07e61..c03463f473adfcd380eafb3b6f125547196030d9 100644
--- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
@@ -116,7 +116,7 @@ public class SharedFolderHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		File sourceFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(sourceResource).getBasefile();
diff --git a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
index 65a896caf260923b9f3d7508f4b5354b98dd6067..f211701ca366056a67b2f109ca2844c3bddbed8a 100644
--- a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
@@ -179,7 +179,7 @@ public class WebDocumentHandler extends FileHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		OLATResource sourceResource = source.getOlatResource();
 		OLATResource targetResource = target.getOlatResource();
 		File sourceFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(sourceResource).getBasefile();
diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java
index e3d6d179eb5e643556cbf86bace94d95441e8445..92d0869acf73d0b274ca3cf1e729799bf9e79935 100644
--- a/src/main/java/org/olat/repository/handlers/WikiHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java
@@ -145,7 +145,7 @@ public class WikiHandler implements RepositoryHandler {
 	}
 	
 	@Override
-	public RepositoryEntry copy(RepositoryEntry source, RepositoryEntry target) {
+	public RepositoryEntry copy(Identity author, RepositoryEntry source, RepositoryEntry target) {
 		final OLATResource sourceResource = source.getOlatResource();
 		final OLATResource targetResource = target.getOlatResource();
 		final FileResourceManager frm = FileResourceManager.getInstance();
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index 3978977bff08bfb96f009d2e0be31a2000fe6f75..dc38e93f0a8ba69926389a2fa45bba8b89e95562 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -214,7 +214,7 @@ public class RepositoryServiceImpl implements RepositoryService {
 		copyEntry = dbInstance.getCurrentEntityManager().merge(copyEntry);
 	
 		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(sourceEntry);
-		copyEntry = handler.copy(sourceEntry, copyEntry);
+		copyEntry = handler.copy(author, sourceEntry, copyEntry);
 		
 		
 		//copy the image
diff --git a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
index 13654edc543726e99a641389aa4fafb7f74465b2..6e546dd560e9df98839fd044337ec1ee839e47dd 100644
--- a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
@@ -425,7 +425,7 @@ public class CoursesWebService {
 					description, copyResource, RepositoryEntry.ACC_OWNERS);
 		
 			RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(src);
-			preparedEntry = handler.copy(src, preparedEntry);
+			preparedEntry = handler.copy(ureq.getIdentity(), src, preparedEntry);
 			
 			preparedEntry.setCanDownload(src.getCanDownload());
 			if(StringHelper.containsNonWhitespace(softKey)) {