diff --git a/demo/df.py b/demo/df.py
new file mode 100644
index 0000000000000000000000000000000000000000..c9ee0122090e64a21dba9ffcb8616d28f68ad239
--- /dev/null
+++ b/demo/df.py
@@ -0,0 +1,33 @@
+from pcl_expect import controller
+from pcl_expect.popen import popen
+
+df = popen("df -k")
+
+x = controller()
+while x.loop():
+    if x.re(df, "Filesystem.*\n"):
+        print "Header:", df.match.group()
+
+x = controller()
+while x.loop():
+    if x.re(df, "^/.* .*(?=\n)"):
+        print "Normal line:", df.match.group()
+        x.cont()
+        continue
+    elif x.re(df, "^/.*(?=\n)"):
+        print "Mount point only:", df.match.group()
+        x.cont()
+        continue
+    elif x.re(df, "^ .*(?=\n)"):
+        print "Info only:", df.match.group()
+        x.cont()
+        continue
+    elif x.re(df, "^\n"):
+        x.cont()
+        continue
+    elif x.re(df, "^.*(?=\n)"):
+        print "Unexpected line", df.match.group()
+        x.cont()
+        continue
+    elif x.eof(df):
+        print "And that's all, folks!"