An instructor teaches four sections of PSY-101. The SIS lists them as sections 01 to 04, so the provisioning process creates four Moodle courses. She builds her content in the first one, copies it three times, posts every announcement four times and grades the same quiz in four gradebooks. Cross-listing makes it worse: when HIST-210 and WGS-210 are taught together in the same room, students under each code land in a different Moodle course and never share a forum.
The problem usually surfaces in the first week of term, when instructors open their dashboard and ask IT or a pedagogical advisor to "merge my courses." By then students have started posting and submitting, and every manual merge carries a risk of losing their work.
Why does Moodle end up with duplicate courses?
Because the simplest mapping is one SIS section, one Moodle course. The section ID is unique and stable, so it makes a convenient key, and a process that follows that rule never has to make a judgment call. Whether provisioning is a script or a full SIS integration, this default produces duplicates unless someone adds merge rules.
Moodle also treats a course as two things at once: the container for content and activities, and the container for enrollments. When each section has its own course, each section also gets its own copy of the content.
Cross-listing adds another layer. In most SIS platforms, cross-listed offerings are tied together by a relationship that the standard enrollment export doesn't include, so the provisioning process never learns that two codes are really one class.
What do duplicate courses cost?
- Instructors maintain several copies of the same material, and the copies drift apart within weeks. One section gets the corrected quiz; another doesn't.
- Students in different sections miss each other's discussions and sometimes get different instructions for the same assignment.
- IT and pedagogical advisors handle merge requests at the busiest moment of the term, on top of everyday Moodle course management, and each merge is a manual operation with no record of who did what.
- Registrars find grades scattered across courses when final marks are compiled, and a hand-built merge can expose one section's information to students of another.
Which workarounds cause new problems?
Some common fixes trade one problem for another:
- Enrolling every student manually in one course. It works on day one, but manual enrollments ignore the SIS from then on: drops never leave and late adds never arrive.
- Deleting the extra courses once students are in. Anything students already posted or submitted in those courses disappears with them, along with their grades.
- Telling the instructor to use one course and ignore the others. Students in the other sections still see an empty course and post questions nobody reads.
- Creating one cohort per section. Cohort sync is designed for populations that span many courses, such as a program or a year group. A cohort per section duplicates the SIS inside Moodle and still needs its own sync.
How do meta-courses work in Moodle?
A meta-course is an ordinary Moodle course that receives its enrollments from other courses. The mechanism is the course meta link enrolment plugin: you add a meta link to a child course in the parent's enrolment methods, and from then on, anyone enrolled in the child is enrolled in the parent with the same role.
This splits the two jobs cleanly. Each section course, fed by the SIS, holds only enrollments and stays hidden from students. The parent holds the content, the activities and the gradebook. When a student is added to or removed from a section, the change follows through to the parent, and meta-linked enrollments can't be edited by hand in the parent, which is exactly what you want.
Two settings deserve attention. Each meta link instance has an Add to group option that places the child's users in a group in the parent, which is how sections stay separate. At site level, the plugin lets you exclude roles from synchronization and choose what happens to a user who leaves the child course.
How to set up a meta-course for several sections
1. Decide what to merge
Agree on the rules with instructors and the registrar before the term opens.
| Merge when | Keep separate when |
|---|---|
| The same instructor teaches several sections of one course | Sections have different content, projects or evaluation schemes |
| Codes are cross-listed and taught together | Different instructors don't want to share materials |
| Section differences can be handled with groups | One section is for credit and another is audit-only with its own grading |
2. Create the parent course with a stable ID number
Name the parent after the course without the section suffix, for example "Introduction to Psychology (PSY-101) – Fall 2026". Give it a course ID number that won't change, such as FA26-PSY-101, so any automation can find it again next week.
3. Hide the section courses from students
Keep each section course hidden (course visibility set to Hide) and empty. These courses exist only to hold enrollments, and teachers shouldn't build anything in them.
4. Enable the plugin and add one meta link per section
A site administrator enables Course meta link under Site administration > Plugins > Enrolments > Manage enrol plugins. In the parent course, open Participants > Enrolment methods (in Moodle 3.9, Course administration > Users > Enrolment methods), add a course meta link for each section, and set Add to group to Create new group. Moodle creates a group named after each section course.
5. Configure groups and roles
Set the parent's group mode to separate groups, and force it if every activity should respect sections. Teaching assistants who should see only their own section must not hold moodle/site:accessallgroups in the parent course, so check their role or add an override.
6. Route every section change through the SIS
When a student switches from section 01 to 03, change it in the SIS and let the sync update the section courses. The meta link then moves the student from one group to the other in the parent. To protect grades in case the removal arrives before the addition, set the plugin's unenrol action to suspend rather than unenroll, and turn on Recover grades default in the grade settings.
7. Close the parent and its children together
At the end of term, hide or archive the parent and every section course at the same time, so stale section courses don't linger in teachers' course lists. The start-of-term checklist covers setting up the next term cleanly.
How Classeo handles it
Classeo builds meta-courses directly from SIS data. Multi-section and cross-listed offerings are merged into a Moodle meta-course with one gradebook and one forum, while each section keeps its own enrollment pool, so instructors teach once and sections stay separated.
Because enrollments keep flowing from the SIS in real time or on a schedule, late adds, drops and section swaps reach the right section within minutes, without anyone editing the parent course. At the end of term, Classeo hides or archives the parent and its sections according to your policy.
Meta-course fusion is tested and audit-logged: every action carries a timestamp and its actor, so a registrar can see when a section was attached and why. The Moodle merge courses page explains when Classeo merges and when it keeps sections apart. To see how this interacts with add/drop, read why students lose access during late adds and drops.
Key takeaways
- Duplicate Moodle courses come from a one-section-equals-one-course mapping, not from anything instructors did wrong.
- A meta-course splits two jobs: section courses hold enrollments, the parent course holds content and grades.
- The course meta link plugin can place each section's students in their own group, which keeps forums and grading scoped per section.
- Decide which offerings to merge before courses open; merging after students have submitted work is where data gets lost.
- Section swaps should go through the SIS and the meta link, never through manual enrollments in the parent course.
Watch four sections become one clean Moodle course
A 30-minute demo of Classeo building a Moodle meta-course from SIS section data, including a section swap handled live.
Book a demoFrequently asked questions
What is a meta-course in Moodle?
A meta-course is a regular Moodle course whose enrollments come from other courses through the course meta link enrolment plugin. Users enrolled in a linked child course, such as one section, are automatically enrolled in the parent course with the same role. Content and activities live in the parent, while the child courses act as enrollment containers and usually stay hidden from students.
How do I merge several Moodle course sections into one course?
Create one parent course, enable the course meta link plugin, then add one meta link enrolment method in the parent for each section course. Use the Add to group option to create a group per section, set the parent to separate groups and hide the section courses from students. Do it before students start submitting work, so nothing has to be moved later.
Do students lose their grades when they switch sections in a meta-course?
They shouldn't, as long as they stay enrolled in the parent course through the new section. The risk comes when a sync removes the student from the old section before adding them to the new one: if they briefly have no enrollment in the parent, Moodle drops their grades from the gradebook. Suspending instead of unenrolling and enabling Recover grades default protects them.
Can Classeo create meta-courses automatically from the SIS?
Yes. Classeo's meta-course fusion merges multi-section and cross-listed offerings from the SIS into a Moodle meta-course, with one gradebook and one forum and a separate enrollment pool for each section. Section changes made in the SIS flow through automatically, and every fusion action is logged with a timestamp and its actor, so registrars can check how a course was assembled.




