diff --git a/src/main/java/org/olat/course/ICourse.java b/src/main/java/org/olat/course/ICourse.java
index 821fc81e387a7ae88f296fdb030eadac4a32bbd1..0ed4c97b658f5fe47ce7dd85173d7a92f4f8300e 100644
--- a/src/main/java/org/olat/course/ICourse.java
+++ b/src/main/java/org/olat/course/ICourse.java
@@ -75,7 +75,7 @@ public interface ICourse extends OLATResourceable {
 	
 	public void postCopy(CourseEnvironmentMapper envMapper, ICourse sourceCourse);
 	
-	public void postImport(CourseEnvironmentMapper envMapper);
+	public void postImport(File importDirectory, CourseEnvironmentMapper envMapper);
 	
 	/**
 	 * Return the container to files for this course.
diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java
index 1156d7db7fd556ddaa265af66b59d6e148204bc1..df5163bb394548876e72fa4c9df5ae2957607817 100644
--- a/src/main/java/org/olat/course/PersistingCourseImpl.java
+++ b/src/main/java/org/olat/course/PersistingCourseImpl.java
@@ -398,13 +398,13 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ
 	}
 	
 	@Override
-	public void postImport(CourseEnvironmentMapper envMapper) {
+	public void postImport(File importDirectory, CourseEnvironmentMapper envMapper) {
 		Structure importedStructure = getRunStructure();
-		visit(new NodePostImportVisitor(envMapper, Processing.runstructure), importedStructure.getRootNode());
+		visit(new NodePostImportVisitor(importDirectory, this, envMapper, Processing.runstructure), importedStructure.getRootNode());
 		saveRunStructure();
 		
 		CourseEditorTreeModel importedEditorModel = getEditorTreeModel();
-		visit(new NodePostImportVisitor(envMapper, Processing.editor), importedEditorModel.getRootNode());
+		visit(new NodePostImportVisitor(importDirectory, this, envMapper, Processing.editor), importedEditorModel.getRootNode());
 		saveEditorTreeModel();
 	}
 	
@@ -574,13 +574,16 @@ class NodePostExportVisitor implements Visitor {
 }
 
 class NodePostImportVisitor implements Visitor {
-	
+	private final ICourse course;
+	private final File importDirectory;
 	private final Processing processType;
 	private final CourseEnvironmentMapper envMapper;
 	
-	public NodePostImportVisitor(CourseEnvironmentMapper envMapper, Processing processType) {
+	public NodePostImportVisitor(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
+		this.course = course;
 		this.envMapper = envMapper;
 		this.processType = processType;
+		this.importDirectory = importDirectory;
 	}
 	
 	@Override
@@ -589,7 +592,7 @@ class NodePostImportVisitor implements Visitor {
 			node = ((CourseEditorTreeNode)node).getCourseNode();
 		}
 		if(node instanceof CourseNode) {
-			((CourseNode)node).postImport(envMapper, processType);
+			((CourseNode)node).postImport(importDirectory, course, envMapper, processType);
 		}
 	}
 }
diff --git a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java
index e43cdbfadef4a92d5ef470cad6fb998a6df2d19c..833d47181dcc63b44505016eadf2e31c5d3f6a0c 100644
--- a/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java
+++ b/src/main/java/org/olat/course/export/CourseEnvironmentMapper.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
+import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
 import org.olat.group.model.BGAreaReference;
 import org.olat.group.model.BusinessGroupEnvironment;
@@ -40,6 +41,20 @@ public class CourseEnvironmentMapper {
 	private final List<BGAreaReference> areas = new ArrayList<BGAreaReference>();
 	private final List<BusinessGroupReference> groups = new ArrayList<BusinessGroupReference>();
 	
+	private Identity author;
+	
+	public CourseEnvironmentMapper() {
+		//
+	}
+	
+	public Identity getAuthor() {
+		return author;
+	}
+
+	public void setAuthor(Identity author) {
+		this.author = author;
+	}
+
 	public List<BGAreaReference> getAreas() {
 		return areas;
 	}
@@ -116,6 +131,18 @@ public class CourseEnvironmentMapper {
 		return groupKeyList;
 	}
 	
+	public Long toGroupKeyFromOriginalKey(Long originalKey) {
+		if(originalKey == null) return null;
+		Long groupKey = null;
+		for(BusinessGroupReference group:groups) {
+			if(originalKey.equals(group.getOriginalKey())) {
+				groupKey = group.getKey();
+				break;
+			}
+		}
+		return groupKey;
+	}
+	
 	public List<Long> toAreaKeyFromOriginalNames(String areaNames) {
 		if(!StringHelper.containsNonWhitespace(areaNames)) return null;
 		String[] areaNameArr = areaNames.split(",");
diff --git a/src/main/java/org/olat/course/nodes/COCourseNode.java b/src/main/java/org/olat/course/nodes/COCourseNode.java
index 156e736df8342acae6719fc4a05dcc2e03b0bd61..60d578413ef7114a491e6831304fcbae3d5c40eb 100755
--- a/src/main/java/org/olat/course/nodes/COCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/COCourseNode.java
@@ -25,6 +25,7 @@
 
 package org.olat.course.nodes;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -123,8 +124,8 @@ public class COCourseNode extends AbstractAccessableCourseNode {
     }
     
     @Override
-    public void postImport(CourseEnvironmentMapper envMapper, Processing processType) {
-        super.postImport(envMapper, processType);
+    public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
+        super.postImport(importDirectory, course, envMapper, processType);
         postImportCopy(envMapper);
     }
     
diff --git a/src/main/java/org/olat/course/nodes/CourseNode.java b/src/main/java/org/olat/course/nodes/CourseNode.java
index 2da740c41b0a69f4091a75de9d19c3cc947c5397..c21423ecf3c1718bfffcaeac26fff3c151a8ba38 100644
--- a/src/main/java/org/olat/course/nodes/CourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CourseNode.java
@@ -371,7 +371,7 @@ public interface CourseNode extends INode, ShortName {
 	/**
 	 * Remap the node to the context of the course after import.
 	 */
-	public void postImport(CourseEnvironmentMapper envMapper, Processing type);
+	public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing type);
 	
 	/**
 	 * 
diff --git a/src/main/java/org/olat/course/nodes/ENCourseNode.java b/src/main/java/org/olat/course/nodes/ENCourseNode.java
index 014e45d239b28534982926dc0170400f1fdb9c05..b2cdb300e11c8dfcb147839b737a16eae0e2ab0e 100644
--- a/src/main/java/org/olat/course/nodes/ENCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ENCourseNode.java
@@ -25,6 +25,7 @@
 
 package org.olat.course.nodes;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -274,8 +275,8 @@ public class ENCourseNode extends AbstractAccessableCourseNode {
 	}
     
     @Override	
-    public void postImport(CourseEnvironmentMapper envMapper, Processing processType) {
-    	super.postImport(envMapper, processType);
+    public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
+    	super.postImport(importDirectory, course, envMapper, processType);
      	postImportCopy(envMapper);
     }
     
diff --git a/src/main/java/org/olat/course/nodes/GenericCourseNode.java b/src/main/java/org/olat/course/nodes/GenericCourseNode.java
index b0448f71a63dd579eaf5c50868f98956cd76a558..828c89bd3702e75b1f9ba41a8017d0ca9b5795f2 100644
--- a/src/main/java/org/olat/course/nodes/GenericCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/GenericCourseNode.java
@@ -440,7 +440,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod
 	}
 
 	@Override
-	public void postImport(CourseEnvironmentMapper envMapper, Processing processType) {
+	public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
 		postImportCopyConditions(envMapper);
 	}
 	
diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
index 62edaaebc93591d1600913de7e55466f370d71f7..a17f2e518afe054e1c4dab35f0f1867aa2b68e17 100644
--- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
@@ -30,6 +30,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -699,55 +700,97 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess
 	}
 
 	@Override
-	public void importNode(File importDirectory, ICourse course, Identity owner, Locale locale, boolean withReferences) {
+	public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
 		// initialize managers
-		ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
+		if(processType == Processing.editor && importDirectory != null) {
+			ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
+			CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
+			// create a new projectBroker
+			ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker();
+			projectBrokerManager.saveProjectBrokerId(projectBroker.getKey(), cpm, this);
+			// get the node folder inside of the importDirectory
+			File folderNodeData = new File(importDirectory, getIdent());
+			// loop through the project directories
+			if (folderNodeData.exists()) {
+				for (File projectDir : folderNodeData.listFiles(DirectoryFilter.DIRECTORY_FILTER)) {
+					for (File projectFile : projectDir.listFiles(new FileNameSuffixFilter("xml"))) {
+						importProject(projectDir, projectFile, projectBroker, course, envMapper);
+					}
+				}
+			}
+		}
+		super.postImport(importDirectory, course, envMapper, processType);
+	}
+	
+	private void importProject(File projectDir, File projectFile, ProjectBroker projectBroker, ICourse course, CourseEnvironmentMapper envMapper) {
+		XStream xstream = XStreamHelper.createXStreamInstance();
+		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
 		ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
-		XStream xstream = XStreamHelper.createXStreamInstance();
-		// create a new projectBroker
-		ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker();
-		projectBrokerManager.saveProjectBrokerId(projectBroker.getKey(), cpm, this);
-		// get the node folder inside of the importDirectory
-		File folderNodeData = new File(importDirectory, this.getIdent());
-		// loop through the project directories
-		if (folderNodeData.exists()) {
-			for (File projectDir : folderNodeData.listFiles(DirectoryFilter.DIRECTORY_FILTER)) {
-				for (File projectFile : projectDir.listFiles(new FileNameSuffixFilter("xml"))) {
-					// read the projectConfiguration from the importDirectory
-					try {
-						Map<String, Object> projectConfig = (HashMap<String, Object>) XStreamHelper.readObject(xstream, projectFile);
-						BusinessGroup projectGroup = projectGroupManager.createProjectGroupFor(projectBroker.getKey(), owner, projectConfig.get("title").toString(), projectConfig.get("description").toString(), course.getResourceableId());
-						Project project = projectBrokerManager.createAndSaveProjectFor(projectConfig.get("title").toString(), projectConfig.get("description").toString(), projectBrokerManager.getProjectBrokerId(cpm, this), projectGroup);
-						projectGroupManager.setDeselectionAllowed(project, (boolean) projectConfig.get("allowDeselection"));
-						project.setMailNotificationEnabled((boolean) projectConfig.get("mailNotificationEnabled"));
-						project.setMaxMembers((int) projectConfig.get("maxMembers"));
-						project.setAttachedFileName(projectConfig.get("attachmentFileName").toString());
-						for (int i = 0; i < (int) projectConfig.get("customeFieldSize"); i++) {
-							project.setCustomFieldValue(i, projectConfig.get("customFieldValue" + i).toString());
-						}
-						projectBrokerManager.updateProject(project);
-
-						// get the attachment directory within the project
-						// directory
-						File attachmentDir = new File(projectDir, "attachment");// .getParentFile().listFiles(attachmentFilter);
-						if (attachmentDir.exists()) {
-							File[] attachment = attachmentDir.listFiles();
-							if (attachment.length > 0) {
-								VFSLeaf attachmentLeaf = new LocalFileImpl(attachment[0]);
-								projectBrokerManager.saveAttachedFile(project, projectConfig.get("attachmentFileName").toString(), attachmentLeaf, course.getCourseEnvironment(), this);
-							}
-						}
-					} catch (Exception e) {
-						// handle/log error in case of FileIO exception or cast
-						// exception if import input is not correct
-						log.error("Error while importing a project into projectbroker", e);
+		ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
+		
+		// read the projectConfiguration from the importDirectory
+		try {
+			@SuppressWarnings("unchecked")
+			Map<String, Object> projectConfig = (HashMap<String, Object>) XStreamHelper.readObject(xstream, projectFile);
+			String projectTitle = (String)projectConfig.get("title");
+			
+			Long originalGroupKey = null;
+			if(projectConfig.containsKey("businessGroupKey")) {
+				originalGroupKey = (Long)projectConfig.get("businessGroupKey");
+			} else {
+				for(BusinessGroupReference ref:envMapper.getGroups()) {
+					if(ref.getName().endsWith(projectTitle)) {
+						originalGroupKey = ref.getOriginalKey();
 					}
 				}
 			}
+
+			BusinessGroup projectGroup = null;
+			if(originalGroupKey != null) {
+				Long groupKey = envMapper.toGroupKeyFromOriginalKey(originalGroupKey);
+				projectGroup = bgs.loadBusinessGroup(groupKey);
+			}
+			if(projectGroup == null) {
+				projectGroup = projectGroupManager.createProjectGroupFor(projectBroker.getKey(), envMapper.getAuthor(), projectTitle, (String)projectConfig.get("description"), course.getResourceableId());
+			}
+			if(envMapper.getAuthor() != null) {
+				Identity author = envMapper.getAuthor();
+				bgs.addOwners(author, null, Collections.singletonList(author), projectGroup, null);
+			}
+
+			Project project = projectBrokerManager.createAndSaveProjectFor(projectTitle, (String)projectConfig.get("description"), projectBrokerManager.getProjectBrokerId(cpm, this), projectGroup);
+			projectGroupManager.setDeselectionAllowed(project, (boolean) projectConfig.get("allowDeselection"));
+			project.setMailNotificationEnabled((boolean) projectConfig.get("mailNotificationEnabled"));
+			project.setMaxMembers((int) projectConfig.get("maxMembers"));
+			project.setAttachedFileName(projectConfig.get("attachmentFileName").toString());
+			for (int i = 0; i < (int) projectConfig.get("customeFieldSize"); i++) {
+				project.setCustomFieldValue(i, projectConfig.get("customFieldValue" + i).toString());
+			}
+			projectBrokerManager.updateProject(project);
+
+			// get the attachment directory within the project
+			// directory
+			File attachmentDir = new File(projectDir, "attachment");// .getParentFile().listFiles(attachmentFilter);
+			if (attachmentDir.exists()) {
+				File[] attachment = attachmentDir.listFiles();
+				if (attachment.length > 0) {
+					VFSLeaf attachmentLeaf = new LocalFileImpl(attachment[0]);
+					projectBrokerManager.saveAttachedFile(project, projectConfig.get("attachmentFileName").toString(), attachmentLeaf, course.getCourseEnvironment(), this);
+				}
+			}
+		} catch (Exception e) {
+			// handle/log error in case of FileIO exception or cast
+			// exception if import input is not correct
+			log.error("Error while importing a project into projectbroker", e);
 		}
 	}
 
+	@Override
+	public void importNode(File importDirectory, ICourse course, Identity owner, Locale locale, boolean withReferences) {
+		super.importNode(importDirectory, course, owner, locale, withReferences);
+	}
+
 	@Override
 	public void exportNode(File exportDirectory, ICourse course) {
 		// initialize managers
@@ -760,9 +803,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess
 		File pbNodeFolder = new File(exportDirectory, getIdent());
 		// get all the projects available in the pb
 		List<Project> projects = projectBrokerManager.getProjectListBy(pb.getKey());
-		ListIterator<Project> projectIterator = projects.listIterator();
-		while (projectIterator.hasNext()) {
-			Project project = projectIterator.next();
+		for (Project project:projects) {
 			File projectFolder = new File(pbNodeFolder, project.getKey().toString());
 			projectFolder.mkdirs();
 			// create a hashmap with the project configuration and insert the
@@ -777,6 +818,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess
 			projectData.put("attachmentFileName", project.getAttachmentFileName());
 			projectData.put("allowDeselection", projectGroupManager.isDeselectionAllowed(project));
 			projectData.put("customeFieldSize", project.getCustomFieldSize());
+			projectData.put("businessGroupKey", project.getProjectGroup().getKey());
 			// iterate through the customFields
 			for (int i = 0; i < project.getCustomFieldSize(); i++) {
 				projectData.put("customFieldValue" + i, project.getCustomFieldValue(i));
@@ -938,59 +980,54 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Assess
 		postExportCondition(conditionProjectBroker, envMapper, backwardsCompatible);
 	}
 
+	/**
+	 * Do re-arrange the projects in a new project broker after the copy happened 
+	 */
     @Override
     public void postCopy(CourseEnvironmentMapper envMapper, Processing processType, ICourse course, ICourse sourceCourse) {
     	super.postCopy(envMapper, processType, course, null);
-	    if(processType.equals(Processing.runstructure)){
-	    	postImportCopy(envMapper, course, sourceCourse);
-	    }
-	}
-    
-    /**
-     * do re-arrange the projects in a new projectbroker after the copy happened 
-     * @param envMapper
-     * @param course
-     */
-	public void postImportCopy(CourseEnvironmentMapper envMapper, ICourse course, ICourse sourceCourse) {
-		//initialize the managers and services
-		ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
-		ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
-		CoursePropertyManager oldCpm = sourceCourse.getCourseEnvironment().getCoursePropertyManager();
-		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
-		//create new Project broker and get the old one
-		Long projectBrokerId = projectBrokerManager.createAndSaveProjectBroker().getKey();
-		projectBrokerManager.saveProjectBrokerId(projectBrokerId, course.getCourseEnvironment().getCoursePropertyManager(), this);
-		Long oldBrokerId = projectBrokerManager.getProjectBrokerId(oldCpm, this);
-		List<Project> projectsFromGroup = projectBrokerManager.getProjectListBy(oldBrokerId);
-		//loop create and configure the new Projects
-		for(Project project : projectsFromGroup){
-			Identity ident = bgs.getMembers(project.getProjectGroup(), GroupRoles.coach.name()).get(0);
-			for(BusinessGroupReference group : envMapper.getGroups()){
-				if(group.getName() == project.getProjectGroup().getName()){
-					bgs.deleteBusinessGroup(bgs.loadBusinessGroup(group.getKey()));
+	    if(processType.equals(Processing.runstructure)) {
+	    	//initialize the managers and services
+			ProjectBrokerManager projectBrokerManager = CoreSpringFactory.getImpl(ProjectBrokerManager.class);
+			ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
+			CoursePropertyManager oldCpm = sourceCourse.getCourseEnvironment().getCoursePropertyManager();
+			BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
+			//create new Project broker and get the old one
+			Long projectBrokerId = projectBrokerManager.createAndSaveProjectBroker().getKey();
+			projectBrokerManager.saveProjectBrokerId(projectBrokerId, course.getCourseEnvironment().getCoursePropertyManager(), this);
+			Long oldBrokerId = projectBrokerManager.getProjectBrokerId(oldCpm, this);
+			List<Project> projectsFromGroup = projectBrokerManager.getProjectListBy(oldBrokerId);
+			//loop create and configure the new Projects
+			for(Project project : projectsFromGroup){
+				Long originalGroupKey = project.getProjectGroup().getKey();
+				Long copiedGroupKey = envMapper.toGroupKeyFromOriginalKey(originalGroupKey);
+				
+				BusinessGroup projectGroup = bgs.loadBusinessGroup(copiedGroupKey);
+				if(envMapper.getAuthor() != null) {
+					Identity author = envMapper.getAuthor();
+					bgs.addOwners(author, null, Collections.singletonList(author), projectGroup, null);
 				}
-			}
-			BusinessGroup projectGroup = bgs.copyBusinessGroup(ident, project.getProjectGroup(), project.getTitle(), project.getDescription(), -1, -1, false, false, false, true, false, false, false, false);
-			Project newProject = projectBrokerManager.createAndSaveProjectFor(project.getTitle(), project.getDescription(), projectBrokerId, projectGroup);
-			// copy all project configurations
-			newProject.setMailNotificationEnabled(project.isMailNotificationEnabled());
-			newProject.setMaxMembers(project.getMaxMembers());
-			for (int i = 0; i < project.getCustomFieldSize(); i++) {
-				newProject.setCustomFieldValue(i, project.getCustomFieldValue(i));
-			}
-			projectGroupManager.setDeselectionAllowed(newProject, project.getProjectGroup().isAllowToLeave());
-			projectBrokerManager.updateProject(newProject);
-			// attachment file
-			OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(projectBrokerManager.getAttamchmentRelativeRootPath(project, sourceCourse.getCourseEnvironment(), this), null);
-			VFSItem item = rootFolder.resolve(project.getAttachmentFileName());
-			if (item instanceof VFSLeaf) {
-				projectBrokerManager.saveAttachedFile(newProject, project.getAttachmentFileName(), (VFSLeaf) item, course.getCourseEnvironment(), this);
-				newProject.setAttachedFileName(project.getAttachmentFileName());
+				
+				Project newProject = projectBrokerManager.createAndSaveProjectFor(project.getTitle(), project.getDescription(), projectBrokerId, projectGroup);
+				// copy all project configurations
+				newProject.setMailNotificationEnabled(project.isMailNotificationEnabled());
+				newProject.setMaxMembers(project.getMaxMembers());
+				for (int i = 0; i < project.getCustomFieldSize(); i++) {
+					newProject.setCustomFieldValue(i, project.getCustomFieldValue(i));
+				}
+				projectGroupManager.setDeselectionAllowed(newProject, project.getProjectGroup().isAllowToLeave());
 				projectBrokerManager.updateProject(newProject);
+				// attachment file
+				OlatRootFolderImpl rootFolder = new OlatRootFolderImpl(projectBrokerManager.getAttamchmentRelativeRootPath(project, sourceCourse.getCourseEnvironment(), this), null);
+				VFSItem item = rootFolder.resolve(project.getAttachmentFileName());
+				if (item instanceof VFSLeaf) {
+					projectBrokerManager.saveAttachedFile(newProject, project.getAttachmentFileName(), (VFSLeaf) item, course.getCourseEnvironment(), this);
+					newProject.setAttachedFileName(project.getAttachmentFileName());
+					projectBrokerManager.updateProject(newProject);
+				}
 			}
-		}
+	    }
 	}
-
 	
 	/**
 	 * @see org.olat.course.nodes.CourseNode#createInstanceForCopy()
diff --git a/src/main/java/org/olat/course/nodes/STCourseNode.java b/src/main/java/org/olat/course/nodes/STCourseNode.java
index 1dd4cc8b9f4a5e893ca9f3fd868d4e299d12cfc7..e05d9be1a5ce0ebaa890c36645ce43910b801372 100644
--- a/src/main/java/org/olat/course/nodes/STCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/STCourseNode.java
@@ -25,6 +25,7 @@
 
 package org.olat.course.nodes;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -617,8 +618,8 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Assess
     }
 	
 	@Override
-	public void postImport(CourseEnvironmentMapper envMapper, Processing processType) {
-		super.postImport(envMapper, processType);
+	public void postImport(File importDirectory, ICourse course, CourseEnvironmentMapper envMapper, Processing processType) {
+		super.postImport(importDirectory, course, envMapper, processType);
 		postImportCopy(envMapper);
 	}
 		
diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java
index 16c041736559349d8f20d208a1cfad0dd4ceba3f..54123f8e12711cd32084400e43f02b81029e765a 100644
--- a/src/main/java/org/olat/repository/handlers/CourseHandler.java
+++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java
@@ -271,9 +271,10 @@ public class CourseHandler implements RepositoryHandler {
 		cgm = course.getCourseEnvironment().getCourseGroupManager();
 		File fImportBaseDirectory = course.getCourseExportDataDir().getBasefile();
 		CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fImportBaseDirectory);
+		envMapper.setAuthor(initialAuthor);
 		//upgrade course
 		course = CourseFactory.loadCourse(cgm.getCourseResource());
-		course.postImport(envMapper);
+		course.postImport(fImportBaseDirectory, envMapper);
 		
 		//rename root nodes
 		course.getRunStructure().getRootNode().setShortTitle(Formatter.truncateOnly(displayname, 25)); //do not use truncate!
@@ -443,6 +444,7 @@ public class CourseHandler implements RepositoryHandler {
 		CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
 		// import groups
 		CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fExportDir);
+		envMapper.setAuthor(author);
 		//upgrade to the current version of the course
 		course = CourseFactory.loadCourse(cgm.getCourseResource());
 		course.postCopy(envMapper, sourceCourse);
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java
index 34d92370ec84556c9976b40ccb76a3d9d8d4a303..7ef713968f77241342dd95425fb2c9d0a89c0fb4 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_8_2_0.java
@@ -176,7 +176,7 @@ public class OLATUpgrade_8_2_0 extends OLATUpgrade {
 					try {
 						ICourse course = CourseFactory.loadCourse(entry.getOlatResource());
 						CourseEnvironmentMapper envMapper = getCourseEnvironmentMapper(entry);
-						course.postImport(envMapper);
+						course.postImport(null, envMapper);
 					} catch (CorruptedCourseException e) {
 						log.error("Course seems corrupt: " + entry.getOlatResource().getResourceableId());
 					} catch (Exception e) {