diff --git a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
index e5cc90220b1d8ebac429840c045f140a15d8c65d..da3e23c028366753f10279fe73d7c8c3166f69e0 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/BinderDAO.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -209,6 +210,12 @@ public class BinderDAO {
 	
 	private void syncMovingAssignments(SectionImpl templateSection, SectionImpl currentSection, Map<Section,Section> templateToSectionsMap) {
 		List<Assignment> templateAssignments = new ArrayList<>(templateSection.getAssignments());
+		for(Iterator<Assignment> currentAssignmentIt=currentSection.getAssignments().iterator(); currentAssignmentIt.hasNext(); ) {
+			if(currentAssignmentIt.next() == null) {
+				currentAssignmentIt.remove();
+			}
+		}
+
 		List<Assignment> currentAssignments = new ArrayList<>(currentSection.getAssignments());
 		for(int i=0; i<currentAssignments.size(); i++) {
 			Assignment currentAssignment = currentAssignments.get(i);
diff --git a/src/test/java/org/olat/modules/portfolio/manager/PortfolioServiceTest.java b/src/test/java/org/olat/modules/portfolio/manager/PortfolioServiceTest.java
index be996e6ecd889c7ea74953c584552aceadacd104..54ff516a2383c1917e5b9039c8750545062f9bf7 100644
--- a/src/test/java/org/olat/modules/portfolio/manager/PortfolioServiceTest.java
+++ b/src/test/java/org/olat/modules/portfolio/manager/PortfolioServiceTest.java
@@ -708,6 +708,92 @@ public class PortfolioServiceTest extends OlatTestCase {
 		Assert.assertEquals("Assignment 4 description", assignment4_1.getSummary());
 	}
 	
+
+	@Test
+	public void syncBinder_moveAssignmentsInSection_multiple() {
+		Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10");
+		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-11");
+		RepositoryEntry templateEntry = createTemplate(owner, "Template", "TE");
+		dbInstance.commitAndCloseSession();
+		
+		//make 2 sections
+		Binder templateBinder = portfolioService.getBinderByResource(templateEntry.getOlatResource());
+		SectionRef sectionRef1 = portfolioService.getSections(templateBinder).get(0);
+		dbInstance.commit();
+		
+		//make 4 assignments
+		Section templateSection1 = portfolioService.getSection(sectionRef1);
+		Assignment assignment_1_1 = portfolioService.addAssignment("1.1 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		Assignment assignment_1_2 = portfolioService.addAssignment("1.2 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		Assignment assignment_1_3 = portfolioService.addAssignment("1.3 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		Assignment assignment_1_4 = portfolioService.addAssignment("1.4 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		Assignment assignment_1_5 = portfolioService.addAssignment("1.5 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		Assignment assignment_1_6 = portfolioService.addAssignment("1.6 Assignment", "", "", AssignmentType.essay, templateSection1, false, false, false, null);
+		dbInstance.commit();
+		List<Assignment> templateAssignments = portfolioService.getAssignments(templateBinder, null);
+		Assert.assertEquals(6, templateAssignments.size());
+		
+		// a user take the binder and synched it a first time
+		Binder binder = portfolioService.assignBinder(id, templateBinder, templateEntry, "74", null);
+		dbInstance.commit();
+		SynchedBinder synchedBinder = portfolioService.loadAndSyncBinder(binder);
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(synchedBinder);
+		Assert.assertEquals(binder, synchedBinder.getBinder());
+		
+		//start all assignments
+		List<Assignment> assignments = portfolioService.getAssignments(binder, null);
+		Assert.assertEquals(6, assignments.size());
+		for(Assignment assignment:assignments) {
+			portfolioService.startAssignment(assignment, id);
+			dbInstance.commit();
+		}
+		dbInstance.commit();
+		
+		// check that the student has it's 8 pages
+		List<Page> pages = portfolioService.getPages(binder, null);
+		Assert.assertEquals(6, pages.size());
+		dbInstance.commit();
+
+		// synched and check the sections order
+		SynchedBinder synchedBinder2 = portfolioService.loadAndSyncBinder(binder);
+		Binder freshBinder = synchedBinder2.getBinder();
+		dbInstance.commitAndCloseSession();
+		
+		//ooops, someone deleted the assignment (simulate jump in the numbering of the list)
+		List<Section> sections = portfolioService.getSections(freshBinder);
+		List<Assignment> firstSectionAssignments = portfolioService.getAssignments(sections.get(0), null);
+		dbInstance.getCurrentEntityManager().remove(firstSectionAssignments.get(1));
+		dbInstance.getCurrentEntityManager().remove(firstSectionAssignments.get(2));
+		dbInstance.getCurrentEntityManager().remove(firstSectionAssignments.get(3));
+		dbInstance.getCurrentEntityManager().remove(firstSectionAssignments.get(5));
+		dbInstance.commit();
+
+		List<Assignment> firstSectionDeletedAssignments = portfolioService.getAssignments(sections.get(0), null);
+		Assert.assertEquals(2, firstSectionDeletedAssignments.size());
+
+		// synched and check the sections order
+		SynchedBinder synchedBinder3 = portfolioService.loadAndSyncBinder(binder);
+		Binder freshBinder3 = synchedBinder3.getBinder();
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(freshBinder3);
+		
+		List<Assignment> firstSectionAssignmentResynched = portfolioService.getAssignments(sections.get(0), null);
+		List<Assignment> templateAssignmentsSynched= new ArrayList<>();
+		Assert.assertEquals(6, firstSectionAssignmentResynched.size());
+		for(Assignment firstSectionAssignment:firstSectionAssignmentResynched) {
+			Assert.assertEquals(firstSectionAssignment.getTitle(), firstSectionAssignment.getTemplateReference().getTitle());
+			templateAssignmentsSynched.add(firstSectionAssignment.getTemplateReference());
+		}
+		
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_1));
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_2));
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_3));
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_4));
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_5));
+		Assert.assertTrue(templateAssignmentsSynched.contains(assignment_1_6));
+	}
+	
 	@Test
 	public void removeAssignment() {
 		Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("port-u-10");