diff --git a/README.md b/README.md
index 0a9f3371f5acbc4e0367ba22c916e0810b270c6a..bb6127487a45ec6a1ae59b81ddd7a8f714be7c6b 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,40 @@
 # Autoupdate Tester
 
-This script tests the Gluon autoupdater by continuously updating a VM from one firmware version to the next one using the autoupdater.
+This script tests the Gluon autoupdater by continuously updating a VM from one
+firmware version to another using the autoupdater.
 
-Before starting the update, we will create a snapshot. After successful update, we will rollback to that snapshot and start again. When a update failed, we will leave a snapshot named `test_fail_%Y_%m_%d_%H_%M_%S` behind so you can investigate what went wrong.
+## How it works
 
-## Setup
+Communicating with the Gluon node works over a virtual serial port.
+
+First of all, we will create a snapshot of your VM. This makes sure the script
+never touches your actual VM state. The script will also take care of cleaning
+up any snapshots it has created, except when an update failed.
+
+Then, we make sure your node is actually running the expected firmware version
+by comparing the contents of `/lib/gluon/release` with what you specified in
+the `--before-version` parameter.
 
-This script to be run on Proxmox with a fully configured Gluon node as VM. This script will use a virtual serial port to communicate with the VM, so be sure to set one up. To verify it's working run `qm terminal <vmid>` and press enter. You should see a root prompt.
+If that matches, we try to ping the IP specified in `--ping-ip` every second to
+make sure your node has connectivty to your network. As soon as it succeeds, we
+run `autoupdate -f`.
 
-In Gluon, set up the update channel as desired, but *disable* the autoupdater. The script will run `autoupdater -f`, so the autoupdater will run even when disabled.
+After updating, we will again the read the firmware version and compare that to
+what you specified in the `--after-version` parameter. If it doesn't, we
+consider the update failed. Then, we again try to ping the IP specified in
+`--ping-ip`. If pinging that IP fails 90 times in a row with retries every
+second, we will consider the update failed.
+
+After successful update, we will rollback to the snapshot and start again.
+When a update failed, we will exit and leave a snapshot
+`test_fail_%Y_%m_%d_%H_%M_%S` behind so you can investigate what went wrong.
+
+## Setup
 
-There are several things, which currently only work for Freifunk Stuttgart, but it should be easy to adjust to your community.
+1. Set up a Gluon node with connectivity to your community as a Proxmox VM.
+1. In Gluon, set up the update channel as desired, but *disable* the autoupdater.
+   The script will run `autoupdater -f`, so the autoupdater will run even when
+   disabled.
+1. Make sure the Gluon node has a virtual serial port attached. To verify it's
+   working run `qm terminal <vmid>` and press enter a few times. You should see
+   a root prompt of your Gluon node.