diff --git a/demo/ftp.pyex b/demo/ftp.pyex
new file mode 100644
index 0000000000000000000000000000000000000000..baa2e7aee965a7286920545d7731653bb5ac0711
--- /dev/null
+++ b/demo/ftp.pyex
@@ -0,0 +1,37 @@
+# The mandatory ftp example...
+
+import pcl_expect
+
+pcl_expect.stty_init = "-onlcr -ocrnl"
+
+ftp = pcl_expect.spawn("ftp ftp.funet.fi")
+
+expect:
+    re(ftp, "Name.*:"):
+        ftp.send("anonymous\n")
+        exp_continue
+    re(ftp, "Password:"):
+        ftp.send("ceder@lysator.liu.se\n")
+        exp_continue
+    re(ftp, "ftp> "):
+        pass
+
+ftp.send("cd pub\n")
+
+expect:
+    re(ftp, "(?s).*ftp> "):
+        pass
+
+ftp.send("passive\n")
+
+expect:
+    re(ftp, "(?s).*ftp> "):
+        pass
+
+ftp.send("dir\n")
+
+expect:
+    re(ftp, "(?s).*ftp> "):
+        print ftp.match.group()
+
+ftp.close()