diff --git a/NEWS.md b/NEWS.md
index 829cb18..1c4b61a 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,6 +1,6 @@
 # revealjs.ids (development version)
 
-- Slides titled "Overview" or "Überblick" are now automatically turned into a table of contents (ported from the old Google Docs slide workflow): their body content is replaced at presentation time with a clickable list of all `#` chapter headings. Adding `{data-overview-subheadings=true}` to the heading also includes the `##` sub-headings, laid out in two columns.
+- Slides titled "Overview" or "Überblick" are now automatically turned into a table of contents (ported from the old Google Docs slide workflow): their body content is replaced at presentation time with a clickable list of all `#` chapter headings. Adding `{data-overview-subheadings=true}` to the heading also includes the `##` sub-headings, laid out in two columns. References and appendix chapters (References/Literatur/Literaturverzeichnis/Appendix/Anhang) are excluded, together with their sub-slides.
 
 - Speaker notes (`::: notes`) and timing comments placed before the first heading are now attached to the title slide instead of ending up on a separate empty phantom slide after it, so the title itself can have a time budget and a welcome note (shown in the speaker view and the mobile notes overlay, and included in `slide_timing()` and the pacing timer).
 
diff --git a/R/revealjs_presentation.R b/R/revealjs_presentation.R
index 75d6c23..dab04c7 100644
--- a/R/revealjs_presentation.R
+++ b/R/revealjs_presentation.R
@@ -82,6 +82,18 @@
 #' The function [slide_timing()] computes these totals directly from an
 #' `.Rmd` source file without rendering it.
 #' 
+#' ## Overview slides
+#' 
+#' Like in the original Google Docs slide workflow, a slide titled
+#' "Overview" or "Überblick" is automatically turned into a table of
+#' contents: its body content is replaced at presentation time with a
+#' clickable list of all `#` chapter headings. Adding
+#' `{data-overview-subheadings=true}` to the heading also includes the
+#' `##` sub-headings below their chapters, laid out in two columns.
+#' References and appendix chapters (References/Literatur/
+#' Literaturverzeichnis/Appendix/Anhang) are left out, together with
+#' their sub-slides.
+#' 
 #' ### Search
 #' 
 #' When opt-in, it is possible to show a search box when pressing `CTRL + SHIFT +
diff --git a/README.Rmd b/README.Rmd
index 2ee1375..8193316 100644
--- a/README.Rmd
+++ b/README.Rmd
@@ -164,7 +164,7 @@
 (any placeholder content -- replaced automatically)
 ```
 
-To also include the `##` sub-headings below their chapters, add `{data-overview-subheadings=true}` to the heading; the list is then laid out in two columns:
+To also include the `##` sub-headings below their chapters, add `{data-overview-subheadings=true}` to the heading; the list is then laid out in two columns. References and appendix chapters (References/Literatur/Literaturverzeichnis/Appendix/Anhang) are left out, together with their sub-slides.
 
 ``` markdown
 ## Overview {data-overview-subheadings=true}
diff --git a/README.md b/README.md
index a993038..29b35a9 100644
--- a/README.md
+++ b/README.md
@@ -210,7 +210,9 @@
 
 To also include the `##` sub-headings below their chapters, add
 `{data-overview-subheadings=true}` to the heading; the list is then
-laid out in two columns:
+laid out in two columns. References and appendix chapters
+(References/Literatur/Literaturverzeichnis/Appendix/Anhang) are left
+out, together with their sub-slides.
 
 ``` markdown
 ## Overview {data-overview-subheadings=true}
diff --git a/inst/rmarkdown/templates/revealjs_presentation/resources/default.html b/inst/rmarkdown/templates/revealjs_presentation/resources/default.html
index 9bda0eb..062ffa7 100644
--- a/inst/rmarkdown/templates/revealjs_presentation/resources/default.html
+++ b/inst/rmarkdown/templates/revealjs_presentation/resources/default.html
@@ -982,9 +982,11 @@
   // headings, replacing whatever body content the slide had (ported from the
   // Google Docs slide workflow). By adding {data-overview-subheadings=true}
   // to the heading, h2 sub-headings are included below their chapters and
-  // the list is laid out in two columns. Styling in the ids theme.
+  // the list is laid out in two columns. References and appendix chapters
+  // (English and German) are left out. Styling in the ids theme.
   (function () {
     var TITLES = ['overview', 'überblick'];
+    var EXCLUDED = ['references', 'literatur', 'literaturverzeichnis', 'appendix', 'anhang'];
 
     function isOverviewSlide(slide) {
       var h = slide.querySelector('h1,h2');
@@ -1007,10 +1009,15 @@
         list.className = 'ids-overview-toc';
         if (includeSub) list.classList.add('with-subheadings');
         var subList = null;
+        var excluded = false;
         slides.forEach(function (slide) {
           if (slide === target || !slide.id || isOverviewSlide(slide)) return;
           var h = slide.querySelector('h1,h2');
-          if (!h || (h.tagName !== 'H1' && !includeSub)) return;
+          if (!h) return;
+          if (h.tagName === 'H1') {
+            excluded = EXCLUDED.indexOf(h.textContent.trim().toLowerCase()) !== -1;
+          }
+          if (excluded || (h.tagName !== 'H1' && !includeSub)) return;
           var link = document.createElement('a');
           link.href = '#/' + slide.id;
           link.textContent = h.textContent;
diff --git a/man/revealjs_presentation.Rd b/man/revealjs_presentation.Rd
index 62c1182..a903d31 100644
--- a/man/revealjs_presentation.Rd
+++ b/man/revealjs_presentation.Rd
@@ -236,6 +236,9 @@
 clickable list of all \verb{#} chapter headings. Adding
 \code{{data-overview-subheadings=true}} to the heading also includes the
 \verb{##} sub-headings below their chapters, laid out in two columns.
+References and appendix chapters (References/Literatur/
+Literaturverzeichnis/Appendix/Anhang) are left out, together with
+their sub-slides.
 \subsection{Search}{
 
 When opt-in, it is possible to show a search box when pressing \code{CTRL + SHIFT + F}. It will seach in the whole presentation, and highlight matched words. The
