diff --git a/README.md b/README.md
index 2439233f752d5c1de15c6d039cfee521b7460e29..2e705d1e7e957510dc75b2d1fa5566c9a7a9e5b6 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # JSC Tutorial: Data Analysis and Plotting with Pandas
 
-Repository for a small-ish internal tutorial held at 26 February 2019 at JSC.
+Repository for a small course held in May 2021.
 
 Material to be found at  
 http://herten1.pages.jsc.fz-juelich.de/jsc-pandas-introduction/
@@ -29,12 +29,12 @@ Cell metadata specifies if a Notebook cell should be treated specially. *Special
 * A cell should end up in the solution Notebook
 * … and combinations of these
 
-Since Notebooks are just JSON, I wrote a small parser in Python which suits my needs: `notebook-task-filter.py`.
+Since Notebooks are just JSON, I wrote a small parser in Python which suits my needs and added it to PyPI to be installed as a CLI tool: [https://pypi.org/project/notebook-splitter/](https://pypi.org/project/notebook-splitter/)
 
-The script can be launched and is reasonably well documentation. It works by providing *tags* of cells to `keep` and *tags* of cells to `remove`. For instance,
+It works by providing *tags* of cells to `keep` and *tags* of cells to `remove`. For instance,
 
 ```bash
-./notebook-task-filter.py $< --keep task --keep solution --remove nopresentation
+notbook-splitter $< --keep task --keep solution --remove nopresentation
 ```
 
 would look into Notebook cells and keep those which are *tagged* `task` or `solution` and remove those which are tagged `nopresentation`. One special tag for removal exists, `all`, which removes everything except what's marked to keep. A tag in the sense used here is a value to a JSON key in the cell's metadata, which is per default `"exercise"` (but can be selected via `--basekey`. Example:
@@ -60,13 +60,15 @@ If you think this script is useful and want to collaborate on it, let me know an
 
 Via `jupyter nbconvert --to slides`, Jupyter Notebooks can be converted to HTML-based slideshows using [reveal.js](https://revealjs.com/). For each cell, one can select in the *Cell Inspector* if the cell should be a `Slide`, `Sub-Slide`, or a `Fragment`.
 
-This works reasonably well, but to add the Jülich design to the reveal.js HTML some more steps are needed. While they are used here (see `Makefile`), please refer to Jan's repository regarding the [reveal.js Jülich Theme](https://gitlab.version.fz-juelich.de/JanMeinke/revealjstheme-juelich).
+This works reasonably well, but to add the Jülich design to the reveal.js HTML some more steps are needed. Those steps are partly implemented in Jan's repository regarding the [reveal.js Jülich Theme](https://gitlab.version.fz-juelich.de/JanMeinke/revealjstheme-juelich), which is loaded as a sub-module, and an additional step to make it work as sub-module here. All is done in the `Makefile`.
 
 A PDF version of the slides is generated with [`decktape`](https://github.com/astefanutti/decktape), a NPM package which uses a headless Chromium instance to generate the PDF pages. It's slow and doesn't look 100 % like the presented slides, but it's the best I could find.
 
 
 ### Gitlab Pages
 
-A Gitlab Shared Runner is used to serve material to the public web page of the tutorial. The static `index.html` is to be found its own (orphan) branch at `pages`. The files are copied from the repository to the public web page as indicated in the CI configuration file `.gitlab-ci.yml`.
+A Gitlab Shared Runner is used to serve material to the public web page of the tutorial. The static `index.html` is to be found in its own (orphan) branch at `pages`. The files are copied from the repository to the public web page as indicated in the CI configuration file `.gitlab-ci.yml`.
 
 Ideally, I'd only check in the `--master.ipynb` Notebook and let the CI create all other material. But there's so many wild dependencies (NPM!!1), I'd rather do it myself.
+
+Because of the sub-module dependencies, the slides are also provided here as a _static_ slide bundle, copied over to the Pages index in the runner.