diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..92cfe6a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,107 @@
+# How to contribute to this project
+
+> **:heavy_exclamation_mark: Important:** This section contains tips for developers who are
+> maintaining the `flink-training` project (not so much people doing the training).
+
+The following sections apply on top of the [Setup Instructions](README.md#set-up-your-development-environment) above.
+
+## Format code
+
+Just like [Apache Flink](https://github.com/apache/flink), we use the [Spotless
+plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven) together
+with [google-java-format](https://github.com/google/google-java-format) to
+format our Java code. You can configure your IDE to automatically apply
+formatting upon saving with these steps:
+
+1. Install the [google-java-format
+   plugin](https://plugins.jetbrains.com/plugin/8527-google-java-format) and
+   enable it for the project
+2. In the plugin settings, change the code style to "AOSP" (4-space indents)
+3. Install the [Save Actions
+   plugin](https://plugins.jetbrains.com/plugin/7642-save-actions)
+4. Enable the plugin, along with "Optimize imports" and "Reformat file" but
+   ignoring `.*README\.md`.
+
+## Ignore refactoring commits
+
+There is a list of refactoring commits in `.git-blame-ignore-revs`.
+When looking at change annotations using `git blame`, it is helpful to ignore these.
+You can configure git and your IDE to do so with:
+
+```bash
+git config blame.ignoreRevsFile .git-blame-ignore-revs
+```
+
+## :heavy_plus_sign: Add new exercises :heavy_plus_sign:
+
+To add a new exercise, we recommend copying an existing one and adapting it. Make sure the new subproject's `build.gradle` file
+contains appropriate class name properties so that we can create the right tasks for
+[running tests and solutions on the command line](README.md#running-exercises-tests-and-solutions-on-the-command-line).
+
+For example:
+
+```groovy
+ext.javaExerciseClassName = 'org.apache.flink.training.exercises.ridesandfares.RidesAndFaresExercise'
+ext.scalaExerciseClassName = 'org.apache.flink.training.exercises.ridesandfares.scala.RidesAndFaresExercise'
+ext.javaSolutionClassName = 'org.apache.flink.training.solutions.ridesandfares.RidesAndFaresSolution'
+ext.scalaSolutionClassName = 'org.apache.flink.training.solutions.ridesandfares.scala.RidesAndFaresSolution'
+
+apply plugin: 'application'
+
+mainClassName = ext.javaExerciseClassName
+```
+
+## Useful Gradle Commands and Tricks
+
+### Clean build with all checks
+
+```bash
+./gradlew clean check shadowJar
+./gradlew clean check shadowJar --no-build-cache
+```
+
+### Force a re-run of all tests only
+
+```bash
+./gradlew cleanTest test  --no-build-cache
+```
+
+> **:information_source: Note:** Ignoring the build-cache is required if you really want to run the test again
+> (without any changes in code). Otherwise the test tasks will just pull the latest test results from the cache.
+
+### Fix formatting
+
+```bash
+./gradlew spotlessApply
+./gradlew :rides-and-fares:spotlessApply
+```
+
+> **:information_source: Note:** You do not have to remember this since `./gradlew check` will not only
+> verify the formatting and print any errors but also tell you the command to use to fix these.
+
+### Tune the Java compiler
+
+Add the following code to the `subprojects { /*...*/ }` section of the
+[`build.gradle`](build.gradle) file and adapt accordingly. For example:
+
+```groovy
+    tasks.withType(JavaCompile) {
+        options.compilerArgs << '-Xlint:unchecked'
+        options.deprecation = true
+    }
+```
+
+> **:information_source: Note:** We do not add this by default to keep the training
+> requirements low for participants and focus on the exercises.
+
+### :warning: Deprecated Gradle Features
+
+You may see this warning being reported from Gradle:
+> Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
+>
+> You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
+>
+> See https://docs.gradle.org/7.1/userguide/command_line_interface.html#sec:command_line_warnings
+
+This is currently caused by https://github.com/johnrengelman/shadow/issues/680
+and has to be fixed by the shadow plugin developers.
diff --git a/LABS-OVERVIEW.md b/LABS-OVERVIEW.md
deleted file mode 100644
index 4f35cdc..0000000
--- a/LABS-OVERVIEW.md
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Labs
-
-1. [Filtering a Stream (Ride Cleansing)](ride-cleansing)
-1. [Stateful Enrichment (Rides and Fares)](rides-and-fares)
-1. [Windowed Analytics (Hourly Tips)](hourly-tips)
-   - [Exercise](hourly-tips/README.md)
-   - [Discussion](hourly-tips/DISCUSSION.md)
-1. [`ProcessFunction` and Timers (Long Ride Alerts)](long-ride-alerts)
-   - [Exercise](long-ride-alerts/README.md)
-   - [Discussion](long-ride-alerts/DISCUSSION.md)
diff --git a/README.md b/README.md
index 15f98ce..6ff5cb5 100644
--- a/README.md
+++ b/README.md
@@ -19,50 +19,54 @@
 
 # Apache Flink Training Exercises
 
-Exercises that go along with the training content in the documentation.
+Exercises that accompany the training content in the documentation.
 
 ## Table of Contents
 
-[**Set up your Development Environment**](#set-up-your-development-environment)
+[**Set up your development environment**](#set-up-your-development-environment)
 
 1. [Software requirements](#software-requirements)
 1. [Clone and build the flink-training project](#clone-and-build-the-flink-training-project)
 1. [Import the flink-training project into your IDE](#import-the-flink-training-project-into-your-ide)
 
-[**Using the Taxi Data Streams**](#using-the-taxi-data-streams)
+[**Use the taxi data streams**](#using-the-taxi-data-streams)
 
-1. [Schema of Taxi Ride Events](#schema-of-taxi-ride-events)
-1. [Generating Taxi Ride Data Streams in a Flink program](#generating-taxi-ride-data-streams-in-a-flink-program)
+1. [Schema of taxi ride events](#schema-of-taxi-ride-events)
+1. [Schema of taxi fare events](#schema-of-taxi-fare-events)
 
-[**How to do the Labs**](#how-to-do-the-labs)
+[**How to do the lab exercises**](#how-to-do-the-lab-exercises)
 
 1. [Learn about the data](#learn-about-the-data)
 1. [Modify `ExerciseBase`](#modify-exercisebase)
 1. [Run and debug Flink programs in your IDE](#run-and-debug-flink-programs-in-your-ide)
-1. [Exercises, Tests, and Solutions](#exercises-tests-and-solutions)
+1. [Exercises, tests, and solutions](#exercises-tests-and-solutions)
 
-[**Labs**](LABS-OVERVIEW.md)
+[**Lab exercises**](#lab-exercises)
+
+[**Contributing**](#contributing)
 
 [**License**](#license)
 
-## Set up your Development Environment
+## Set up your development environment
 
-The following instructions guide you through the process of setting up a development environment for the purpose of developing, debugging, and executing solutions to the Flink developer training exercises and examples.
+You will need to set up your environment in order to develop, debug, and execute solutions to the training exercises and examples.
 
 ### Software requirements
 
 Flink supports Linux, OS X, and Windows as development environments for Flink programs and local execution. The following software is required for a Flink development setup and should be installed on your system:
 
-- a JDK for Java 8 or Java 11 (a JRE is not sufficient; other versions of Java are currently not supported)
 - Git
-- an IDE for Java (and/or Scala) development with Gradle support.
-  We recommend [IntelliJ](https://www.jetbrains.com/idea/), but [Eclipse](https://www.eclipse.org/downloads/) or [Visual Studio Code](https://code.visualstudio.com/) (with the [Java extension pack](https://code.visualstudio.com/docs/java/java-tutorial)) can also be used so long as you stick to Java. For Scala, you will need to use IntelliJ (and its [Scala plugin](https://plugins.jetbrains.com/plugin/1347-scala/)).
+- a JDK for Java 8 or Java 11 (a JRE is not sufficient; other versions of Java are currently not supported)
+- an IDE for Java (and/or Scala) development with Gradle support
+  - We recommend [IntelliJ](https://www.jetbrains.com/idea/), but [Eclipse](https://www.eclipse.org/downloads/) or [Visual Studio Code](https://code.visualstudio.com/) (with the [Java extension pack](https://code.visualstudio.com/docs/java/java-tutorial)) can also be used so long as you stick to Java
+  - For Scala, you will need to use IntelliJ (and its [Scala plugin](https://plugins.jetbrains.com/plugin/1347-scala/))
 
-> **:information_source: Note for Windows users:** The examples of shell commands provided in the training instructions are for UNIX systems. To make things easier, you may find it worthwhile to setup cygwin or WSL. For developing Flink jobs, Windows works reasonably well: you can run a Flink cluster on a single machine, submit jobs, run the webUI, and execute jobs in the IDE.
+> **:information_source: Note for Windows users:** The shell command examples provided in the training instructions are for UNIX systems.
+> You may find it worthwhile to setup cygwin or WSL. For developing Flink jobs, Windows works reasonably well: you can run a Flink cluster on a single machine, submit jobs, run the webUI, and execute jobs in the IDE.
 
 ### Clone and build the flink-training project
 
-This `flink-training` project contains exercises, tests, and reference solutions for the programming exercises. Clone the `flink-training` project from Github and build it.
+This `flink-training` repository contains exercises, tests, and reference solutions for the programming exercises.
 
 > **:information_source: Repository Layout:** This repository has several branches set up pointing to different Apache Flink versions, similarly to the [apache/flink](https://github.com/apache/flink) repository with:
 > - a release branch for each minor version of Apache Flink, e.g. `release-1.10`, and
@@ -70,20 +74,22 @@
 >
 > If you want to work on a version other than the current Flink release, make sure to check out the appropriate branch.
 
+Clone the `flink-training` repository from GitHub, navigate into the project repository, and build it:
+
 ```bash
 git clone https://github.com/apache/flink-training.git
 cd flink-training
 ./gradlew test shadowJar
 ```
 
-If you haven’t done this before, at this point you’ll end up downloading all of the dependencies for this Flink training project. This usually takes a few minutes, depending on the speed of your internet connection.
+If this is your first time building it, you will end up downloading all of the dependencies for this Flink training project. This usually takes a few minutes, depending on the speed of your internet connection.
 
 If all of the tests pass and the build is successful, you are off to a good start.
 
 <details>
-<summary><strong>Users in China: click here for instructions about using a local maven mirror.</strong></summary>
+<summary><strong>:cn: Users in China: click here for instructions on using a local Maven mirror.</strong></summary>
 
-If you are in China, we recommend configuring the maven repository to use a mirror. You can do this by uncommenting the appropriate line in our [`build.gradle`](build.gradle) like this:
+If you are in China, we recommend configuring the Maven repository to use a mirror. You can do this by uncommenting this section in our [`build.gradle`](build.gradle) file:
 
 ```groovy
     repositories {
@@ -100,13 +106,13 @@
 ```
 </details>
 
-
-### Enable Scala (optional)
+<details>
+<summary><strong>Enable Scala (optional)</strong></summary>
 
 The exercises in this project are also available in Scala but due to a couple
 of reported problems from non-Scala users, we decided to disable these by
 default. You can re-enable all Scala exercises and solutions by uncommenting
-the Scala plugin in our [`build.gradle`](build.gradle) file:
+this section in our [`build.gradle`](build.gradle) file:
 
 ```groovy
 subprojects {
@@ -116,24 +122,31 @@
 ```
 
 You can also selectively apply this plugin in a single subproject if desired.
+</details>
+
 
 ### Import the flink-training project into your IDE
 
 The project needs to be imported as a gradle project into your IDE.
 
-Once that’s done you should be able to open [`RideCleansingTest`](ride-cleansing/src/test/java/org/apache/flink/training/exercises/ridecleansing/RideCleansingTest.java) and successfully run this test.
+Then you should be able to open [`RideCleansingTest`](ride-cleansing/src/test/java/org/apache/flink/training/exercises/ridecleansing/RideCleansingTest.java) and run this test.
 
-> **:information_source: Note for Scala users:** You will need to use IntelliJ with the JetBrains Scala plugin, and you will need to add a Scala 2.12 SDK to the Global Libraries section of the Project Structure. IntelliJ will ask you for the latter when you open a Scala file.
+> **:information_source: Note for Scala users:** You will need to use IntelliJ with the JetBrains Scala plugin, and you will need to add a Scala 2.12 SDK to the Global Libraries section of the Project Structure.
+> IntelliJ will ask you for the latter when you open a Scala file.
 
-## Using the Taxi Data Streams
+## Use the taxi data streams
 
-These exercises use data [generators](common/src/main/java/org/apache/flink/training/exercises/common/sources) that produce simulated event streams
-inspired by those shared by the [New York City Taxi & Limousine Commission](http://www.nyc.gov/html/tlc/html/home/home.shtml)
-in their public [data set](https://uofi.app.box.com/NYCtaxidata) about taxi rides in New York City.
+These exercises use data [generators](common/src/main/java/org/apache/flink/training/exercises/common/sources) that produce simulated event streams.
+The data is inspired by the [New York City Taxi & Limousine Commission's](http://www.nyc.gov/html/tlc/html/home/home.shtml) public
+[data set](https://uofi.app.box.com/NYCtaxidata) about taxi rides in New York City.
 
-### Schemas of Taxi Ride and Taxi Fare Events
+### Schema of taxi ride events
 
-Our taxi data set contains information about individual taxi rides in New York City. Each ride is represented by two events: a trip start, and a trip end event. Each event consists of eleven fields:
+Our taxi data set contains information about individual taxi rides in New York City.
+
+Each ride is represented by two events: a trip start, and a trip end.
+
+Each event consists of eleven fields:
 
 ```
 rideId         : Long      // a unique id for each ride
@@ -150,7 +163,9 @@
 passengerCnt   : Short     // number of passengers on the ride
 ```
 
-There is also a related data set containing fare data about those same rides, with these fields:
+### Schema of taxi fare events
+
+There is also a related data set containing fare data about those same rides, with the following fields:
 
 ```
 rideId         : Long      // a unique id for each ride
@@ -163,169 +178,72 @@
 totalFare      : Float     // total fare collected
 ```
 
-## How to do the Labs
+## How to do the lab exercises
 
-In the hands-on sessions you will implement Flink programs using various Flink APIs.
+In the hands-on sessions, you will implement Flink programs using various Flink APIs.
 
 The following steps guide you through the process of using the provided data streams, implementing your first Flink streaming program, and executing your program in your IDE.
 
-We assume you have set up your development environment according to our [setup guide above](#set-up-your-development-environment).
+We assume you have set up your development environment according to our [setup guide](#set-up-your-development-environment).
 
 ### Learn about the data
 
-The initial set of exercises are all based on data streams of events about taxi rides and taxi fares. These streams are produced by source functions which reads data from input files. Please read the [instructions above](#using-the-taxi-data-streams) to learn how to use them.
+The initial set of exercises are all based on data streams of events about taxi rides and taxi fares. These streams are produced by source functions which reads data from input files.
+Read the [instructions](#using-the-taxi-data-streams) to learn how to use them.
 
 ### Run and debug Flink programs in your IDE
 
 Flink programs can be executed and debugged from within an IDE. This significantly eases the development process and provides an experience similar to working on any other Java (or Scala) application.
 
-Starting a Flink program in your IDE is as easy as running its `main()` method. Under the hood, the execution environment will start a local Flink instance within the same process. Hence it is also possible to put breakpoints in your code and debug it.
+To start a Flink program in your IDE, run its `main()` method. Under the hood, the execution environment will start a local Flink instance within the same process. Hence, it is also possible to put breakpoints in your code and debug it.
 
-Assuming you have an IDE with this `flink-training` project imported, you can run (or debug) a simple streaming job as follows:
+If you have an IDE with this `flink-training` project imported, you can run (or debug) a streaming job by:
 
-- Open the `org.apache.flink.training.examples.ridecount.RideCountExample` class in your IDE
-- Run (or debug) the `main()` method of the `RideCountExample` class using your IDE.
+- opening the `org.apache.flink.training.examples.ridecount.RideCountExample` class in your IDE
+- running (or debugging) the `main()` method of the `RideCountExample` class using your IDE
 
-### Exercises, Tests, and Solutions
+### Exercises, tests, and solutions
 
-Each of these exercises includes an `...Exercise` class with most of the necessary boilerplate code for getting started, as well as a JUnit Test class (`...Test`) with a few tests for your implementation, and a `...Solution` class with a complete solution.
+Each of these exercises include:
+- an `...Exercise` class with most of the necessary boilerplate code for getting started
+- a JUnit Test class (`...Test`) with a few tests for your implementation
+- a `...Solution` class with a complete solution
+
+There are Java and Scala versions of all the exercise, test, and solution classes. They can each be run from IntelliJ.
 
 > **:information_source: Note:** As long as your `...Exercise` class is throwing a `MissingSolutionException`, the provided JUnit test classes will ignore that failure and verify the correctness of the solution implementation instead.
 
-There are Java and Scala versions of all the exercise, test, and solution classes, each of which can be run from IntelliJ as usual.
+You can run exercises, solutions, and tests with the `gradlew` command.
 
-#### Running Exercises, Tests, and Solutions on the Command Line
-
-You can execute exercises, solutions, and tests via `gradlew` from a CLI.
-
-- Tests can be executed as usual:
-
-    ```bash
-    ./gradlew test
-    ./gradlew :<subproject>:test
-    ```
-
-- For Java/Scala exercises and solutions, we provide special tasks that are listed via
-
-    ```bash
-    ./gradlew printRunTasks
-    ```
-
------
-
-Now you are ready to begin with the first exercise in our [**Labs**](LABS-OVERVIEW.md).
-
------
-
-## How to work on this project
-
-> **:heavy_exclamation_mark: Important:** This section contains tips for developers who are
-> maintaining the `flink-training` project (not so much people doing the
-> training).
-
-The following sections apply on top of the [Setup Instructions](#set-up-your-development-environment) above.
-
-### Code Formatting
-
-Just like [Apache Flink](https://github.com/apache/flink), we use the [Spotless
-plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven) together
-with [google-java-format](https://github.com/google/google-java-format) to
-format our Java code. You can configure your IDE to automatically apply
-formatting on saving with these steps:
-
-1. Install the [google-java-format
-   plugin](https://plugins.jetbrains.com/plugin/8527-google-java-format) and
-   enable it for the project
-2. In the plugin settings, change the code style to "AOSP" (4-space indents)
-3. Install the [Save Actions
-   plugin](https://plugins.jetbrains.com/plugin/7642-save-actions)
-4. Enable the plugin, along with "Optimize imports" and "Reformat file" but
-   ignoring `.*README\.md`.
-
-### Ignoring Refactoring Commits
-
-We keep a list of big refactoring commits in `.git-blame-ignore-revs`. When looking at change annotations using `git blame` it's helpful to ignore these. You can configure git and your IDE to do so using:
+To run tests:
 
 ```bash
-git config blame.ignoreRevsFile .git-blame-ignore-revs
+./gradlew test
+./gradlew :<subproject>:test
 ```
 
-### Adding new exercises
-
-If you want to add a new exercise, we recommend copying an existing one and
-adapting it accordingly. Make sure the new subproject's `build.gradle` file
-contains appropriate class name properties so that we can create the right
-tasks for [Running Tests and Solutions on the Command Line](#running-exercises-tests-and-solutions-on-the-command-line), e.g.:
-
-```groovy
-ext.javaExerciseClassName = 'org.apache.flink.training.exercises.ridesandfares.RidesAndFaresExercise'
-ext.scalaExerciseClassName = 'org.apache.flink.training.exercises.ridesandfares.scala.RidesAndFaresExercise'
-ext.javaSolutionClassName = 'org.apache.flink.training.solutions.ridesandfares.RidesAndFaresSolution'
-ext.scalaSolutionClassName = 'org.apache.flink.training.solutions.ridesandfares.scala.RidesAndFaresSolution'
-
-apply plugin: 'application'
-
-mainClassName = ext.javaExerciseClassName
-```
-
-### Useful Gradle Commands and Tricks
-
-#### Clean Build with all Checks
+For Java/Scala exercises and solutions, we provide special tasks that can be listed with:
 
 ```bash
-./gradlew clean check shadowJar
-./gradlew clean check shadowJar --no-build-cache
+./gradlew printRunTasks
 ```
 
-#### Force a Re-run of all Tests Only
+:point_down: Now you are ready to begin the lab exercises. :point_down:
 
-```bash
-./gradlew cleanTest test  --no-build-cache
-```
+## Lab exercises
 
-> **:information_source: Note:** Ignoring the build-cache is required if you really want to run the test again (without any changes in code).
-> Otherwise the test tasks will just pull the latest test results from the cache.
+1. [Filtering a Stream (Ride Cleansing)](ride-cleansing)
+1. [Stateful Enrichment (Rides and Fares)](rides-and-fares)
+1. [Windowed Analytics (Hourly Tips)](hourly-tips)
+   - [Exercise](hourly-tips/README.md)
+   - [Discussion](hourly-tips/DISCUSSION.md)
+1. [`ProcessFunction` and Timers (Long Ride Alerts)](long-ride-alerts)
+   - [Exercise](long-ride-alerts/README.md)
+   - [Discussion](long-ride-alerts/DISCUSSION.md)
 
-#### Fix Formatting
+## Contribute
 
-```bash
-./gradlew spotlessApply
-./gradlew :rides-and-fares:spotlessApply
-```
-
-> **:information_source: Note:** You actually do not have to remember this since
-> `./gradlew check` will not only verify the formatting and print any errors but
-> also mention the command to fix these.
-
-#### Tune the Java Compiler
-
-Add the following code to the `subprojects { /*...*/ }` section of the
-[`build.gradle`](build.gradle) file and adapt accordingly, for example:
-
-```groovy
-    tasks.withType(JavaCompile) {
-        options.compilerArgs << '-Xlint:unchecked'
-        options.deprecation = true
-    }
-```
-
-> **:information_source: Note:** We don't add this by default for now to keep
-> the training requirements low for participants and keep focus on the
-> exercises at hand.
-
-#### Deprecated Gradle Features
-
-You may see this warning being reported from Gradle:
-> Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
->
-> You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
->
-> See https://docs.gradle.org/7.1/userguide/command_line_interface.html#sec:command_line_warnings
-
-This is currently caused by https://github.com/johnrengelman/shadow/issues/680
-and has to be fixed by the shadow plugin developers.
-
------
+If you would like to contribute to this repository or add new exercises, please read the [contributing](CONTRIBUTING.md) guide.
 
 ## License
 
diff --git a/hourly-tips/DISCUSSION.md b/hourly-tips/DISCUSSION.md
index 56a55d4..ef7c6c0 100644
--- a/hourly-tips/DISCUSSION.md
+++ b/hourly-tips/DISCUSSION.md
@@ -149,4 +149,4 @@
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/hourly-tips/README.md b/hourly-tips/README.md
index 396d609..142edec 100644
--- a/hourly-tips/README.md
+++ b/hourly-tips/README.md
@@ -73,4 +73,4 @@
 
 [**Lab Discussion: Windowed Analytics (Hourly Tips)**](DISCUSSION.md)
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/long-ride-alerts/DISCUSSION.md b/long-ride-alerts/DISCUSSION.md
index 571094b..158edc2 100644
--- a/long-ride-alerts/DISCUSSION.md
+++ b/long-ride-alerts/DISCUSSION.md
@@ -41,4 +41,4 @@
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/long-ride-alerts/README.md b/long-ride-alerts/README.md
index 3366fbb..c38b587 100644
--- a/long-ride-alerts/README.md
+++ b/long-ride-alerts/README.md
@@ -99,4 +99,4 @@
 
 [**Lab Discussion: `ProcessFunction` and Timers (Long Ride Alerts)**](DISCUSSION.md)
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/ride-cleansing/README.md b/ride-cleansing/README.md
index 2a1c2fd..c357399 100644
--- a/ride-cleansing/README.md
+++ b/ride-cleansing/README.md
@@ -90,4 +90,4 @@
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/rides-and-fares/README.md b/rides-and-fares/README.md
index 888d763..04c355e 100644
--- a/rides-and-fares/README.md
+++ b/rides-and-fares/README.md
@@ -84,4 +84,4 @@
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
