diff --git a/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java b/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java
index f12e87ab1b2fa4fc6b9202e343ba12c8f66ada2d..e1715e21d087a670c0e74f31f21cbcb5a513ebdb 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/AssignmentDAO.java
@@ -308,8 +308,21 @@ public class AssignmentDAO {
 		return query.getResultList();
 	}
 	
+	public List<Assignment> loadAssignmentReferences(Assignment assignment) {
+		StringBuilder sb = new StringBuilder(512);
+		sb.append("select assignment from pfassignment as assignment")
+		  .append(" left join fetch assignment.section as section")
+		  .append(" left join fetch assignment.page as page")
+		  .append(" left join fetch assignment.formEntry as formEntry")
+		  .append(" where assignment.templateReference.key=:assignmentKey");
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Assignment.class)
+				.setParameter("assignmentKey", assignment.getKey())
+				.getResultList();
+	}
+	
 	public List<Assignment> loadAssignments(Page page, String searchString) {
-		StringBuilder sb = new StringBuilder();
+		StringBuilder sb = new StringBuilder(512);
 		sb.append("select assignment from pfassignment as assignment")
 		  .append(" inner join fetch assignment.section as section")
 		  .append(" inner join fetch assignment.page as page")
diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
index a8ee479f21ae9092e29dfb92628d932899da58ac..207fa8ea7463b581d8b7e9c1ebab6daacdb7f996 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
@@ -424,18 +424,43 @@ public class PortfolioServiceImpl implements PortfolioService {
 		Assignment reloadedAssignment = assignmentDao.loadAssignmentByKey(assignment.getKey());
 		Section reloadedSection = reloadedAssignment.getSection();
 		Binder reloadedBinder = reloadedAssignment.getBinder();
-		boolean removedSection = false;
-		boolean removedBinder = false;
+
 		if(reloadedSection != null) {
-			removedSection = ((SectionImpl)reloadedSection).getAssignments().remove(reloadedAssignment);
+			((SectionImpl)reloadedSection).getAssignments().remove(reloadedAssignment);
+			assignmentDao.deleteAssignment(reloadedAssignment);
+			binderDao.updateSection(reloadedSection);
 		} else if(reloadedBinder != null) {
-			removedBinder = ((BinderImpl)reloadedBinder).getAssignments().remove(reloadedAssignment);
+			Set<Binder> bindersToUpdate = new HashSet<>();
+			List<Assignment> synchedBindersAssignments = assignmentDao.loadAssignmentReferences(reloadedAssignment);
+			for(Assignment synchedAssignment:synchedBindersAssignments) {
+				List<Assignment> instantiatedAssignments = assignmentDao.loadAssignmentReferences(synchedAssignment);
+				Set<Section> sectionsToUpdate = new HashSet<>();
+				for(Assignment instantiatedAssignment:instantiatedAssignments) {
+					if(instantiatedAssignment.getSection() != null) {
+						Section assignmentSection = instantiatedAssignment.getSection();
+						if(((SectionImpl)assignmentSection).getAssignments().remove(instantiatedAssignment)) {
+							sectionsToUpdate.add(assignmentSection);
+						}
+						assignmentDao.deleteAssignment(instantiatedAssignment);
+					}
+				}
+				for(Section section:sectionsToUpdate) {
+					binderDao.updateSection(section);
+				}
+				
+				if(synchedAssignment.getBinder() != null) {
+					Binder synchedBinder = synchedAssignment.getBinder();
+					if(((BinderImpl)synchedBinder).getAssignments().remove(reloadedAssignment)) {
+						bindersToUpdate.add(synchedBinder);
+					}
+					assignmentDao.deleteAssignment(synchedAssignment);
+				}
+			}
 			
-		}
-		assignmentDao.deleteAssignment(reloadedAssignment);
-		if(removedSection) {
-			binderDao.updateSection(reloadedSection);
-		} else if(removedBinder) {
+			for(Binder binder:bindersToUpdate) {
+				binderDao.updateBinder(binder);
+			}
+			assignmentDao.deleteAssignment(reloadedAssignment);
 			binderDao.updateBinder(reloadedBinder);
 		}
 		return true;