diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index 7118b5550102dfc1b7d0df6825fc55564cc90e59..89dad79142ec704e4574afa790a7738502189d41 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -593,7 +593,7 @@ public class CourseFactory extends BasicManager {
 			Tracing.logError("Error deploying course from ZIP: " + exportedCourseZIPFile.getAbsolutePath(), CourseFactory.class);
 			return null;
 		}
-		File courseExportData = ImportCourseController.getExportDataDir(course);
+		File courseExportData = course.getCourseExportDataDir().getBasefile();
 		// get the export data directory
 		// create the repository entry
 		RepositoryEntry re = repositoryManager.createRepositoryEntryInstance("administrator");
diff --git a/src/main/java/org/olat/course/ICourse.java b/src/main/java/org/olat/course/ICourse.java
index 47964e0e069d192ba04407dad0d99e2207a4924e..f6b009f2cf87bab71cb8eeb0e6c05ddfc1b87b96 100644
--- a/src/main/java/org/olat/course/ICourse.java
+++ b/src/main/java/org/olat/course/ICourse.java
@@ -81,6 +81,8 @@ public interface ICourse extends OLATResourceable {
 	 * @return the container to the coursefolder of this course
 	 */
 	public VFSContainer getCourseFolderContainer();
+	
+	public OlatRootFolderImpl getCourseExportDataDir();
 
 	/**
 	 * @return The course title. This is the display name of the course repository entry
diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java
index 1e3c09bd9023bd3907d8654d44883766170b59da..42f6ce84cd60ff37561260c2aefbcd1ed985d5a2 100644
--- a/src/main/java/org/olat/course/PersistingCourseImpl.java
+++ b/src/main/java/org/olat/course/PersistingCourseImpl.java
@@ -43,6 +43,7 @@ import org.olat.core.util.nodes.INode;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.tree.TreeVisitor;
 import org.olat.core.util.tree.Visitor;
+import org.olat.core.util.vfs.LocalImpl;
 import org.olat.core.util.vfs.MergeSource;
 import org.olat.core.util.vfs.NamedContainerImpl;
 import org.olat.core.util.vfs.Quota;
@@ -153,6 +154,15 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ
 	public OlatRootFolderImpl getCourseBaseContainer() {
 		return courseRootContainer;
 	}
+	
+	@Override
+	public OlatRootFolderImpl getCourseExportDataDir() {
+		OlatRootFolderImpl vfsExportDir = (OlatRootFolderImpl)getCourseBaseContainer().resolve(ICourse.EXPORTED_DATA_FOLDERNAME);
+		if (vfsExportDir == null) {
+			vfsExportDir = (OlatRootFolderImpl)getCourseBaseContainer().createChildContainer(ICourse.EXPORTED_DATA_FOLDERNAME);
+		}
+		return vfsExportDir;
+	}
 
 	/**
 	 * @see org.olat.course.ICourse#getCourseFolderPath()
diff --git a/src/main/java/org/olat/course/repository/ImportCourseController.java b/src/main/java/org/olat/course/repository/ImportCourseController.java
index 6aee8b5d420448a7b67c97ab99210fb0a00831d5..02bd32174ed66bc87683f1fe2a338dead69e2887 100644
--- a/src/main/java/org/olat/course/repository/ImportCourseController.java
+++ b/src/main/java/org/olat/course/repository/ImportCourseController.java
@@ -128,7 +128,7 @@ public class ImportCourseController extends BasicController implements IAddContr
 		// create group management
 		CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
 		// import groups
-		CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(getExportDataDir(course));
+		CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(course.getCourseExportDataDir().getBasefile());
 		//upgrade to the current version of the course
 		ICourse course = CourseFactory.loadCourse(cgm.getCourseResource());
 		course.postImport(envMapper);
@@ -193,12 +193,6 @@ public class ImportCourseController extends BasicController implements IAddContr
 	 */
 	public void event(UserRequest ureq, Component source, Event event) {
 		//nothing to do
-/*		if (source == finishedMessage) {
-			getWindowControl().pop();
-			// save the editor tree model, to persist any changes made during import.
-			course.saveEditorTreeModel();
-			callback.finished(ureq);
-		}*/
 	}
 
 	/**
@@ -342,7 +336,7 @@ public class ImportCourseController extends BasicController implements IAddContr
 	private void processSharedFolder(UserRequest ureq) {
 		// if shared folder controller exists we did already import this one.
 		if (sharedFolderImportController == null) {
-			RepositoryEntryImportExport sfImportExport = SharedFolderManager.getInstance().getRepositoryImportExport(getExportDataDir(course));
+			RepositoryEntryImportExport sfImportExport = SharedFolderManager.getInstance().getRepositoryImportExport(course.getCourseExportDataDir().getBasefile());
 			
 			removeAsListenerAndDispose(sharedFolderImportController);
 			sharedFolderImportController = new ImportSharedfolderReferencesController(sfImportExport, course, ureq, getWindowControl());
@@ -355,7 +349,7 @@ public class ImportCourseController extends BasicController implements IAddContr
 	private void processGlossary(UserRequest ureq) {
 		// if glossary controller exists we did already import this one.
 		if (glossaryImportController == null) {
-			RepositoryEntryImportExport sfImportExport = GlossaryManager.getInstance().getRepositoryImportExport(getExportDataDir(course));
+			RepositoryEntryImportExport sfImportExport = GlossaryManager.getInstance().getRepositoryImportExport(course.getCourseExportDataDir().getBasefile());
 			
 			removeAsListenerAndDispose(glossaryImportController);
 			glossaryImportController = new ImportGlossaryReferencesController(sfImportExport, course, ureq, getWindowControl());
@@ -367,7 +361,7 @@ public class ImportCourseController extends BasicController implements IAddContr
 	
 	private void cleanupExportDataDir() {
 		if (course == null) return;
-		File fExportedDataDir = getExportDataDir(course);
+		File fExportedDataDir = course.getCourseExportDataDir().getBasefile();
 		if (fExportedDataDir.exists())
 			FileUtils.deleteDirsAndFiles(fExportedDataDir, true, true);
 	}
@@ -400,7 +394,7 @@ public class ImportCourseController extends BasicController implements IAddContr
 		while (nodeListPos < nodeList.size()) {
 			CourseEditorTreeNode nextNode = nodeList.get(nodeListPos);
 			nodeListPos++;
-			Controller ctrl = nextNode.getCourseNode().importNode(getExportDataDir(course), course, false, ureq, getWindowControl());
+			Controller ctrl = nextNode.getCourseNode().importNode(course.getCourseExportDataDir().getBasefile(), course, false, ureq, getWindowControl());
 			if (ctrl != null) {
 				// this node needs a controller to do its import job.
 				removeAsListenerAndDispose(activeImportController);
@@ -426,19 +420,6 @@ public class ImportCourseController extends BasicController implements IAddContr
 		return true;
 	}
 	
-	/**
-	 * The folder where nodes export their data to.
-	 * 
-	 * @param theCourse
-	 * @return File
-	 */
-	public static File getExportDataDir(ICourse theCourse) {
-		LocalImpl vfsExportDir = (LocalImpl)theCourse.getCourseBaseContainer().resolve(ICourse.EXPORTED_DATA_FOLDERNAME);
-		if (vfsExportDir == null)
-			vfsExportDir = (OlatRootFolderImpl)theCourse.getCourseBaseContainer().createChildContainer(ICourse.EXPORTED_DATA_FOLDERNAME);
-		return vfsExportDir.getBasefile();
-	}
-	
 	protected void doDispose() {
 		if (course != null) CourseFactory.closeCourseEditSession(course.getResourceableId(), false);
 	}
diff --git a/src/main/java/org/olat/course/repository/ImportPortfolioReferencesController.java b/src/main/java/org/olat/course/repository/ImportPortfolioReferencesController.java
index 4b3bfacf7772f79be766d32dcf7b1a1358a9ae82..3dc6bafb2b172e2ac3538476355a6843c14dc513 100644
--- a/src/main/java/org/olat/course/repository/ImportPortfolioReferencesController.java
+++ b/src/main/java/org/olat/course/repository/ImportPortfolioReferencesController.java
@@ -115,7 +115,7 @@ public class ImportPortfolioReferencesController extends BasicController {
 		putInitialPanel(mainPanel);
 	}
 
-	protected void importWithoutAsking (UserRequest ureq) {
+	public void importWithoutAsking (UserRequest ureq) {
 		event (ureq, importButton, Event.DONE_EVENT);
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
diff --git a/src/main/java/org/olat/course/repository/ImportReferencesController.java b/src/main/java/org/olat/course/repository/ImportReferencesController.java
index 39b1ff92ab3e54c7bf54637ddb520b16ad6a729e..b7ab591175f52ef41381cb48c776deb4e985fca6 100644
--- a/src/main/java/org/olat/course/repository/ImportReferencesController.java
+++ b/src/main/java/org/olat/course/repository/ImportReferencesController.java
@@ -153,7 +153,7 @@ public class ImportReferencesController extends BasicController {
 		putInitialPanel(mainPanel);
 	}
 	
-	protected void importWithoutAsking (UserRequest ureq) {
+	public void importWithoutAsking (UserRequest ureq) {
 		//isolate the transaction
 		try {
 			DBFactory.getInstance().commitAndCloseSession();
diff --git a/src/main/java/org/olat/course/repository/ImportSharedfolderReferencesController.java b/src/main/java/org/olat/course/repository/ImportSharedfolderReferencesController.java
index cf100e0c6b36dbda2dbdc3b4c78d351581eaefba..5c0c34f9713020b929385f6eeb74bf5c6841659a 100644
--- a/src/main/java/org/olat/course/repository/ImportSharedfolderReferencesController.java
+++ b/src/main/java/org/olat/course/repository/ImportSharedfolderReferencesController.java
@@ -123,7 +123,6 @@ public class ImportSharedfolderReferencesController extends BasicController {
 				getWindowControl().setError("Import failed.");
 				return;
 			}
-			Translator repoTranslator = new PackageTranslator(Util.getPackageName(RepositoryManager.class), ureq.getLocale());
 			removeAsListenerAndDispose(repoDetailsForm);
 			repoDetailsForm = new DetailsReadOnlyForm(ureq, getWindowControl(), importedRepositoryEntry, SharedFolderFileResource.TYPE_NAME, false);
 			listenTo(repoDetailsForm);
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryAddController.java b/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
index a9ca18fddd66cf85e0091184ad897d25dc8a3e9b..d6d6ee8554627dfb0e494da9446f4b84b186d185 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryAddController.java
@@ -433,7 +433,6 @@ public class RepositoryAddController extends BasicController {
 				translate("add.header.specific", new String[] {translate(ores.getResourceableTypeName())}));
 		repositoryadd.setPage(VELOCITY_ROOT + "/addDetails.html");
 		
-		System.out.println("rrrrrrrrrrr addFinished Commit and close");
 		DBFactory.getInstance().commitAndCloseSession();
 	}
 
diff --git a/src/main/java/org/olat/restapi/repository/course/CourseElementWebService.java b/src/main/java/org/olat/restapi/repository/course/CourseElementWebService.java
index 7269db3651913e90dd4f2f821bd05ccfacd047a6..f4c8f398d951e61d32d2b98c8e31e09fac79f52e 100644
--- a/src/main/java/org/olat/restapi/repository/course/CourseElementWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CourseElementWebService.java
@@ -1561,9 +1561,8 @@ public class CourseElementWebService extends AbstractCourseNodeWebService {
 		Boolean isSolutionEnabled = (Boolean)moduleConfig.get(TACourseNode.CONF_SOLUTION_ENABLED);
 		config.setIsSolutionEnabled(isSolutionEnabled == null ? Boolean.TRUE : isSolutionEnabled);
 		//get the conditions
-		List lstConditions = courseNode.getConditionExpressions();
-		for(Object obj : lstConditions) {
-			ConditionExpression cond = (ConditionExpression) obj;
+		List<ConditionExpression> lstConditions = courseNode.getConditionExpressions();
+		for(ConditionExpression cond : lstConditions) {
 			String id = cond.getId();
 			String expression = cond.getExptressionString();
 			if(id.equals(TACourseNode.ACCESS_TASK))
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 dc7edbee0f55f385a46edd3fe27f2c1c8e0d8734..75fb8a6a07e09af82f1aa387e7b0a8a9a8307054 100644
--- a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
@@ -27,11 +27,11 @@ import static org.olat.restapi.security.RestSecurityHelper.isAuthor;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DefaultValue;
-import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
@@ -51,25 +51,31 @@ import org.olat.basesecurity.Constants;
 import org.olat.basesecurity.SecurityGroup;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.control.Controller;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Roles;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
-import org.olat.core.util.CodeHelper;
-import org.olat.core.util.FileUtils;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
-import org.olat.core.util.WebappHelper;
 import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
+import org.olat.course.Structure;
 import org.olat.course.config.CourseConfig;
 import org.olat.course.nodes.CourseNode;
+import org.olat.course.repository.ImportGlossaryReferencesController;
+import org.olat.course.repository.ImportPortfolioReferencesController;
+import org.olat.course.repository.ImportReferencesController;
+import org.olat.course.repository.ImportSharedfolderReferencesController;
 import org.olat.course.tree.CourseEditorTreeNode;
+import org.olat.modules.glossary.GlossaryManager;
+import org.olat.modules.sharedfolder.SharedFolderManager;
 import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryImportExport;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.SearchRepositoryEntryParameters;
 import org.olat.repository.handlers.RepositoryHandler;
@@ -77,6 +83,7 @@ import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
 import org.olat.restapi.security.RestSecurityHelper;
+import org.olat.restapi.support.ErrorWindowControl;
 import org.olat.restapi.support.MediaTypeVariants;
 import org.olat.restapi.support.MultipartReader;
 import org.olat.restapi.support.ObjectFactory;
@@ -226,8 +233,8 @@ public class CoursesWebService {
 		if(!isAuthor(request)) {
 			return Response.serverError().status(Status.UNAUTHORIZED).build();
 		}
-		
-		Identity identity = RestSecurityHelper.getUserRequest(request).getIdentity();
+		UserRequest ureq = RestSecurityHelper.getUserRequest(request);
+		Identity identity = ureq.getIdentity();
 		
 		File tmpFile = null;
 		try {
@@ -238,8 +245,8 @@ public class CoursesWebService {
 				Long accessRaw = partsReader.getLongValue("access");
 				int access = accessRaw != null ? accessRaw.intValue() : RepositoryEntry.ACC_OWNERS;
 				String softKey = partsReader.getValue("softkey");
-				
-				ICourse course = importCourse(identity, tmpFile, softKey, access);
+				String displayName = partsReader.getValue("displayname");
+				ICourse course = importCourse(ureq, identity, tmpFile, displayName, softKey, access);
 				CourseVO vo = ObjectFactory.get(course);
 				return Response.ok(vo).build();
 			}
@@ -256,12 +263,114 @@ public class CoursesWebService {
 		return Response.ok(vo).build();
 	}
 	
-	public static ICourse importCourse(Identity identity, File fCourseImportZIP, String softKey, int access) {
-		RepositoryEntry re = CourseFactory.deployCourseFromZIP(fCourseImportZIP, identity.getName(), softKey, access);
-		ICourse course = CourseFactory.loadCourse(re.getOlatResource());
+	public static ICourse importCourse(UserRequest ureq, Identity identity, File fCourseImportZIP,
+			String displayName, String softKey, int access) {
+		
+		OLATResource newCourseResource = OLATResourceManager.getInstance().createOLATResourceInstance(CourseModule.class);
+		ICourse course = CourseFactory.importCourseFromZip(newCourseResource, fCourseImportZIP);
+		if (course == null) {
+			return null;
+		}
+		
+		if(!StringHelper.containsNonWhitespace(displayName)) {
+			RepositoryEntryImportExport importExport = new RepositoryEntryImportExport(course.getCourseExportDataDir().getBasefile());
+			displayName = importExport.getDisplayName();
+		}
+		if(!StringHelper.containsNonWhitespace(displayName)) {
+			displayName = "import-" + UUID.randomUUID().toString();
+		}
+		
+		// create empty run structure
+		course = CourseFactory.openCourseEditSession(course.getResourceableId());
+		Structure runStructure = course.getRunStructure();
+		runStructure.getRootNode().removeAllChildren();
+		CourseFactory.saveCourse(course.getResourceableId());
+		
+		//import all references
+		List<CourseEditorTreeNode> nodeList = new ArrayList<CourseEditorTreeNode>();
+		collectNodesAsList((CourseEditorTreeNode)course.getEditorTreeModel().getRootNode(), nodeList);
+		processNodeList(ureq, course, nodeList);
+		
+		CourseConfig courseConfig = course.getCourseEnvironment().getCourseConfig();
+		if (courseConfig.hasCustomSharedFolder()) {
+			processSharedFolder(ureq, course);
+		} 
+		else if (courseConfig.hasGlossary()) {
+			processGlossary(ureq, course);
+		}
+
+		//make the repository
+		RepositoryEntry re = createCourseRepositoryEntry(identity, displayName, softKey, newCourseResource);
+		prepareSecurityGroup(identity, re, access);
+		
+		//update tree
+		course.getRunStructure().getRootNode().setShortTitle(Formatter.truncateOnly(course.getCourseTitle(), 25)); //do not use truncate!
+		course.getRunStructure().getRootNode().setLongTitle(displayName);
+		CourseEditorTreeNode editorRootNode = ((CourseEditorTreeNode)course.getEditorTreeModel().getRootNode());
+		editorRootNode.getCourseNode().setShortTitle(Formatter.truncateOnly(course.getCourseTitle(), 25)); //do not use truncate!
+		editorRootNode.getCourseNode().setLongTitle(course.getCourseTitle());
+		// mark entire structure as dirty/new so the user can re-publish
+		markDirtyNewRecursively(editorRootNode);
+		// root has already been created during export. Unmark it.
+		editorRootNode.setNewnode(false);
+		
+		CourseFactory.closeCourseEditSession(course.getResourceableId(), false);
+		
+		//publish
+		CourseFactory.publishCourse(course, identity, ureq.getLocale());
+
 		return course;
 	}
 	
+	private static void processSharedFolder(UserRequest ureq, ICourse course) {
+		// if shared folder controller exists we did already import this one.
+		RepositoryEntryImportExport sfImportExport
+			= SharedFolderManager.getInstance().getRepositoryImportExport(course.getCourseExportDataDir().getBasefile());
+		ImportSharedfolderReferencesController.doImport(sfImportExport, course, false, ureq.getIdentity());
+	}
+
+	private static void processGlossary(UserRequest ureq, ICourse course) {
+		// if glossary controller exists we did already import this one.
+		RepositoryEntryImportExport sfImportExport
+			= GlossaryManager.getInstance().getRepositoryImportExport(course.getCourseExportDataDir().getBasefile());
+		ImportGlossaryReferencesController.doImport(sfImportExport, course, false, ureq.getIdentity());
+	}
+	
+	/**
+	 * Mark whole tree (incl. root node) "dirty" and "new" recursively.
+	 * 
+	 * @param editorRootNode
+	 */
+	private static void markDirtyNewRecursively(CourseEditorTreeNode editorRootNode) {
+		editorRootNode.setDirty(true);
+		editorRootNode.setNewnode(true);
+		if (editorRootNode.getChildCount() > 0) {
+			for (int i = 0; i < editorRootNode.getChildCount(); i++) {
+				markDirtyNewRecursively((CourseEditorTreeNode)editorRootNode.getChildAt(i));
+			}
+		}
+	}
+	
+	private static void collectNodesAsList(CourseEditorTreeNode rootNode, List<CourseEditorTreeNode> nl) {
+		nl.add(rootNode);
+		for (int i = 0; i < rootNode.getChildCount(); i++) {
+			collectNodesAsList((CourseEditorTreeNode)rootNode.getChildAt(i), nl);
+		}
+	}
+	
+	private static void processNodeList(UserRequest ureq, ICourse course, List<CourseEditorTreeNode> nodeList) {
+		for (CourseEditorTreeNode nextNode : nodeList) {
+			Controller ctrl = nextNode.getCourseNode().importNode(course.getCourseExportDataDir().getBasefile(), course, false, ureq, new ErrorWindowControl());
+			if (ctrl != null) {
+				if (ctrl instanceof ImportReferencesController) {
+					((ImportReferencesController) ctrl).importWithoutAsking (ureq);
+				} else if (ctrl instanceof ImportPortfolioReferencesController) {
+					((ImportPortfolioReferencesController) ctrl).importWithoutAsking (ureq);
+				}
+			}
+		}
+	}
+	
 	public static ICourse copyCourse(Long copyFrom, UserRequest ureq, String name, String longTitle, CourseConfigVO courseConfigVO) {
 		String shortTitle = name;
 		//String learningObjectives = name + " (Example of creating a new course)";
@@ -300,7 +409,7 @@ public class CoursesWebService {
 			OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(newResourceable);
 			preparedEntry.setOlatResource(ores);
 			// create security group
-			prepareSecurityGroup(ureq.getIdentity(), preparedEntry);
+			prepareSecurityGroup(ureq.getIdentity(), preparedEntry, RepositoryEntry.ACC_OWNERS);
 			// copy image if available
 			RepositoryManager.getInstance().copyImage(src, preparedEntry);
 			
@@ -324,35 +433,43 @@ public class CoursesWebService {
 		String learningObjectives = shortTitle + " (Example of creating a new course)";
 
 		try {
-			// create the course resource
 			OLATResourceable oresable = OLATResourceManager.getInstance().createOLATResourceInstance(CourseModule.class);
-
 			// create a repository entry
-			RepositoryEntry addedEntry = RepositoryManager.getInstance().createRepositoryEntryInstance(initialAuthor.getName());
-			addedEntry.setCanDownload(false);
-			addedEntry.setCanLaunch(true);
-			addedEntry.setDisplayname(shortTitle);
-			addedEntry.setResourcename("-");
-			// Do set access for owner at the end, because unfinished course should be
-			// invisible
-			// addedEntry.setAccess(RepositoryEntry.ACC_OWNERS);
-			addedEntry.setAccess(0);// Access for nobody
-
-			// Set the resource on the repository entry and save the entry.
-			// bind resource and repository entry
-			OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(oresable);
-			addedEntry.setOlatResource(ores);
-
+			RepositoryEntry addedEntry = createCourseRepositoryEntry(initialAuthor, shortTitle, null, oresable);
 			// create an empty course
 			CourseFactory.createEmptyCourse(oresable, shortTitle, longTitle, learningObjectives);
-			prepareSecurityGroup(initialAuthor, addedEntry);
+			prepareSecurityGroup(initialAuthor, addedEntry, RepositoryEntry.ACC_OWNERS);
 			return prepareCourse(addedEntry, courseConfigVO);
 		} catch (Exception e) {
 			throw new WebApplicationException(e);
 		}
 	}
 	
-	private static void prepareSecurityGroup(Identity identity, RepositoryEntry addedEntry) {
+	private static RepositoryEntry createCourseRepositoryEntry(Identity initialAuthor, String shortTitle, 
+			String softKey, OLATResourceable oresable) {
+		// create a repository entry
+		RepositoryEntry addedEntry = RepositoryManager.getInstance().createRepositoryEntryInstance(initialAuthor.getName());
+		addedEntry.setCanDownload(false);
+		addedEntry.setCanLaunch(true);
+		addedEntry.setDisplayname(shortTitle);
+		addedEntry.setResourcename("-");
+		if(StringHelper.containsNonWhitespace(softKey) && softKey.length() <= 30) {
+			addedEntry.setSoftkey(softKey);
+		}
+		// Do set access for owner at the end, because unfinished course should be
+		// invisible
+		// addedEntry.setAccess(RepositoryEntry.ACC_OWNERS);
+		addedEntry.setAccess(0);// Access for nobody
+
+		// Set the resource on the repository entry and save the entry.
+		// bind resource and repository entry
+		OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(oresable);
+		addedEntry.setOlatResource(ores);
+		
+		return addedEntry;//!!!no update at this point
+	}
+	
+	private static void prepareSecurityGroup(Identity identity, RepositoryEntry addedEntry, int access) {
 		// create security group
 		BaseSecurity securityManager = BaseSecurityManager.getInstance();
 		SecurityGroup newGroup = securityManager.createAndPersistSecurityGroup();
@@ -381,7 +498,7 @@ public class CoursesWebService {
 		securityManager.createAndPersistPolicy(participantGroup, Constants.PERMISSION_HASROLE, Constants.ORESOURCE_PARTICIPANT);
 		addedEntry.setParticipantGroup(participantGroup);
 		// Do set access for owner at the end, because unfinished course should be invisible
-		addedEntry.setAccess(RepositoryEntry.ACC_OWNERS);
+		addedEntry.setAccess(access);
 		RepositoryManager.getInstance().saveRepositoryEntry(addedEntry);
 	}
 	
diff --git a/src/test/java/org/olat/restapi/Course_with_blog.zip b/src/test/java/org/olat/restapi/Course_with_blog.zip
new file mode 100644
index 0000000000000000000000000000000000000000..62ec56d7e6f1321396de9cc7e58a1a2969ca585e
Binary files /dev/null and b/src/test/java/org/olat/restapi/Course_with_blog.zip differ
diff --git a/src/test/java/org/olat/restapi/CoursesTest.java b/src/test/java/org/olat/restapi/CoursesTest.java
index 69e7e282441e5bde0d0b55b168684cac1296cbef..01e1a16197e3b5800c5e27b259b798e61bfc02f7 100644
--- a/src/test/java/org/olat/restapi/CoursesTest.java
+++ b/src/test/java/org/olat/restapi/CoursesTest.java
@@ -174,7 +174,7 @@ public class CoursesTest extends OlatJerseyTestCase {
 	
 	@Test
 	public void testImportCourse() throws IOException, URISyntaxException {
-		URL cpUrl = CoursesTest.class.getResource("Very_small_course.zip");
+		URL cpUrl = CoursesTest.class.getResource("Course_with_blog.zip");
 		assertNotNull(cpUrl);
 		File cp = new File(cpUrl.toURI());