diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
index 9ef8f947ec04bab3e23f087ce0132a496ec2f69b..fa96f59f095caeb6f2bd6b62ced7d9695b5fc158 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
@@ -48,6 +48,7 @@ import org.olat.modules.portfolio.Binder;
 import org.olat.modules.portfolio.BinderConfiguration;
 import org.olat.modules.portfolio.BinderSecurityCallback;
 import org.olat.modules.portfolio.BinderStatus;
+import org.olat.modules.portfolio.PortfolioService;
 import org.olat.modules.portfolio.PortfolioV2Module;
 import org.olat.modules.portfolio.ui.event.DeleteBinderEvent;
 import org.olat.modules.portfolio.ui.event.RestoreBinderEvent;
@@ -82,6 +83,8 @@ public class BinderController extends BasicController implements TooledControlle
 	
 	@Autowired
 	private PortfolioV2Module portfolioModule;
+	@Autowired
+	private PortfolioService portfolioService;
 
 	public BinderController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel,
 			BinderSecurityCallback secCallback, Binder binder, BinderConfiguration config) {
@@ -208,6 +211,7 @@ public class BinderController extends BasicController implements TooledControlle
 			if(event == Event.CHANGED_EVENT) {
 				removeAsListenerAndDispose(entriesCtrl);
 				entriesCtrl = null;
+				binder = portfolioService.getBinderByKey(binder.getKey());
 			} else if(event instanceof SectionSelectionEvent) {
 				SectionSelectionEvent sse = (SectionSelectionEvent)event;
 				List<ContextEntry> entries = new ArrayList<>();
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
index 93b3f1dae0cd576d5abbbc7a764bca0e7325ae94..54076545452e88de0e5b67504d1fc739c34cff7f 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
@@ -47,17 +47,21 @@ import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.link.LinkPopupSettings;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
 import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
+import org.olat.core.gui.components.text.TextComponent;
+import org.olat.core.gui.components.text.TextFactory;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.creator.ControllerCreator;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.spacesaver.ToggleBoxController;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.CodeHelper;
 import org.olat.core.util.StringHelper;
 import org.olat.modules.portfolio.AssessmentSection;
 import org.olat.modules.portfolio.Assignment;
@@ -94,6 +98,8 @@ public class BinderPageListController extends AbstractPageListController {
 	private FormLink newSectionButton, previousSectionLink, nextSectionLink, showAllSectionsLink;
 	
 	private CloseableModalController cmc;
+	private TextComponent summaryComp;
+	private ToggleBoxController summaryCtrl;
 	private SectionEditController newSectionCtrl;
 	private PageMetadataEditController newPageCtrl;
 	private AssignmentEditController newAssignmentCtrl;
@@ -111,6 +117,10 @@ public class BinderPageListController extends AbstractPageListController {
 		this.binder = binder;
 		owners = portfolioService.getMembers(binder, PortfolioRoles.owner.name());
 		
+		summaryComp = TextFactory.createTextComponentFromString("summaryCmp" + CodeHelper.getRAMUniqueID(), "", "o_block_large_bottom", false, null);
+		summaryCtrl = new ToggleBoxController(ureq, wControl, getGuiPrefsKey(binder), translate("summary.open"),
+				translate("summary.close"), summaryComp);
+		
 		initForm(ureq);
 		loadModel(ureq, null);
 		
@@ -119,6 +129,14 @@ public class BinderPageListController extends AbstractPageListController {
 			initialPanel.setCssClass("o_edit_mode");
 		}
 	}
+	
+	private String getGuiPrefsKey(OLATResourceable binderOres) {
+		return new StringBuilder()
+				.append(binderOres.getResourceableTypeName())
+				.append("::")
+				.append(binderOres.getResourceableId())
+				.toString();
+	}
 
 	@Override
 	public void initTools() {
@@ -214,6 +232,13 @@ public class BinderPageListController extends AbstractPageListController {
 
 	@Override
 	protected void loadModel(UserRequest ureq, String searchString) {
+		if (StringHelper.containsNonWhitespace(binder.getSummary())) {
+			summaryComp.setText(binder.getSummary());
+			flc.getFormItemComponent().put("summary", summaryCtrl.getInitialComponent());
+		} else {
+			flc.getFormItemComponent().remove("summary");
+		}
+		
 		List<Section> sections = portfolioService.getSections(binder);
 
 		List<CategoryToElement> categorizedElements = portfolioService.getCategorizedSectionsAndPages(binder);
@@ -389,6 +414,13 @@ public class BinderPageListController extends AbstractPageListController {
 		}
 		timelineEl.setPoints(points);
 	}
+	
+	@Override
+	protected void doDispose() {
+		removeAsListenerAndDispose(summaryCtrl);
+		summaryCtrl = null;
+		super.doDispose();
+	}
 
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
diff --git a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
index c3765b45715dc1e55600232bf98fc98bf6fc6c8a..a405100fafa5d263dda852d72eefc0a88bbbf5e7 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
@@ -39,6 +39,8 @@ import org.olat.core.gui.components.link.LinkPopupSettings;
 import org.olat.core.gui.components.stack.TooledController;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
 import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
+import org.olat.core.gui.components.text.TextComponent;
+import org.olat.core.gui.components.text.TextFactory;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
@@ -49,12 +51,14 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
+import org.olat.core.gui.control.generic.spacesaver.ToggleBoxController;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
+import org.olat.core.util.CodeHelper;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.modules.portfolio.AssessmentSection;
@@ -105,6 +109,8 @@ public class TableOfContentController extends BasicController implements TooledC
 	private final TooledStackedPanel stackPanel;
 	
 	private CloseableModalController cmc;
+	private TextComponent summaryComp;
+	private ToggleBoxController summaryCtrl;
 	private UserCommentsController commentsCtrl;
 	private SectionEditController newSectionCtrl;
 	private SectionEditController editSectionCtrl;
@@ -152,10 +158,23 @@ public class TableOfContentController extends BasicController implements TooledC
 		mainVC.contextPut("isTemplate", secCallback.canNewAssignment());
 		mainVC.contextPut("isPersonalBinder", (!secCallback.canNewAssignment() && secCallback.canEditMetadataBinder()));
 		
+		summaryComp = TextFactory.createTextComponentFromString("summaryCmp" + CodeHelper.getRAMUniqueID(), "", null,
+				false, null);
+		summaryCtrl = new ToggleBoxController(ureq, wControl, getGuiPrefsKey(binder), translate("summary.open"),
+				translate("summary.close"), summaryComp);
+		
 		putInitialPanel(mainVC);
 		loadModel();
 	}
 	
+	private String getGuiPrefsKey(OLATResourceable binderOres) {
+		return new StringBuilder()
+				.append(binderOres.getResourceableTypeName())
+				.append("::")
+				.append(binderOres.getResourceableId())
+				.toString();
+	}
+	
 	public int getNumOfSections() {
 		return sectionList == null ? 0 : sectionList.size();
 	}
@@ -226,6 +245,13 @@ public class TableOfContentController extends BasicController implements TooledC
 	
 	protected void loadModel() {
 		mainVC.contextPut("binderTitle", StringHelper.escapeHtml(binder.getTitle()));
+
+		if (StringHelper.containsNonWhitespace(binder.getSummary())) {
+			summaryComp.setText(binder.getSummary());
+			mainVC.put("summary", summaryCtrl.getInitialComponent());
+		} else {
+			mainVC.remove("summary");
+		}
 		
 		List<SectionRow> sectionRows = new ArrayList<>();
 		Map<Long,SectionRow> sectionMap = new HashMap<>();
@@ -429,7 +455,8 @@ public class TableOfContentController extends BasicController implements TooledC
 
 	@Override
 	protected void doDispose() {
-		//
+		removeAsListenerAndDispose(summaryCtrl);
+		summaryCtrl = null;
 	}
 	
 	@Override
@@ -482,6 +509,7 @@ public class TableOfContentController extends BasicController implements TooledC
 			if(event == Event.DONE_EVENT) {
 				binder = binderMetadataCtrl.getBinder();
 				loadModel();
+				fireEvent(ureq, Event.CHANGED_EVENT);
 			}
 			cmc.deactivate();
 			cleanUp();
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_content/binder_pages.html b/src/main/java/org/olat/modules/portfolio/ui/_content/binder_pages.html
index 096668fb9bfa83ee4ffc8671aa6a3eb516ea7263..11757bacc079409292e8cf84667d93497fc191c9 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_content/binder_pages.html
+++ b/src/main/java/org/olat/modules/portfolio/ui/_content/binder_pages.html
@@ -10,8 +10,14 @@
 		</div>
 		#end
 	</div>
-	
+
 	<div class="o_portfolio_entries #if($timelineSwitch) o_portfolio_withtimeline #end">
+		#if($r.available("summary"))
+			<div class="o_block_large_bottom">
+				$r.render("summary")
+			</div>
+		#end	
+	
 		$r.render("table")
 		
 		#if($r.available("create.new.section"))
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html b/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html
index 4dd5ffc62e8cfa2ec250b72c638ccfe555ab597b..32402ff2f4a0da0c21b69ad97d2676e39d07b037 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html
+++ b/src/main/java/org/olat/modules/portfolio/ui/_content/table_of_contents.html
@@ -7,6 +7,9 @@
 		$r.contextHelpWithWrapper("Portfolio task and assignment: Collecting and editing")			
 	#end
 	<h2>$r.translate("table.of.contents", $binderTitle) #if($owners && !$owners.isEmpty())<small>$r.translate("binder.by",$owners)</small>#end</h2>
+	#if($r.available("summary"))
+		$r.render("summary")
+	#end
 		
 	<div class="o_portfolio_toc #if($timelineSwitch) o_portfolio_withtimeline #end clearfix">
 		<ul class="list-unstyled">
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
index 5073941e303f930f6c43e8c95aebf7ddee1f26f0..40a6e63a8d94bb009627c87c1d2f6939caf9b498 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
@@ -353,6 +353,8 @@ status.user.incoming=Neu
 status.user.inProcess=In Bearbeitung
 status.user.done=Erledigt
 summary=Zusammenfassung
+summary.close=Zusammenfassung ausblenden
+summary.open=Zusammenfassung \u00F6ffnen
 summary.placeholder=Kurze Zusammenfassung \u00FCber den Inhalt
 table.grading.failed.points=<span class\="o_state o_failed"><i class\="o_icon o_icon_failed"> </i> {0} Punkt(e)</span>
 table.grading.no=noch kein Bewertung
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
index 756ad06db7f26cb28ddc85f5f78dd92894c4a681..e7e90272249f7e3bdd5a49eed8cee71f4d7ca730 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
@@ -351,6 +351,8 @@ status.user.incoming=New
 status.user.inProcess=In process
 status.user.done=Done
 summary=Summary
+summary.close=Hide summary
+summary.open=Open summary
 summary.placeholder=Short summary about the content
 table.grading.failed.points=<span class\="o_state o_failed"><i class\="o_icon o_icon_failed"> </i> {0} Point(s)</span>
 table.grading.no=no grading yet