diff --git a/Demo/threads/README b/Demo/threads/README
new file mode 100644
index 0000000..9c6d30a
--- /dev/null
+++ b/Demo/threads/README
@@ -0,0 +1,5 @@
+This directory contains some demonstrations of the thread module.
+They are mostly "proof of concept" type applications:
+
+telnet.py	Version of ../sockets/telnet.py using threads.
+wpi.py		Version of ../scripts/pi.py using threads and stdwin.
diff --git a/Demo/threads/telnet.py b/Demo/threads/telnet.py
new file mode 100644
index 0000000..e5101eb
--- /dev/null
+++ b/Demo/threads/telnet.py
@@ -0,0 +1,110 @@
+# Minimal interface to the Internet telnet protocol.
+#
+# *** modified to use threads ***
+#
+# It refuses all telnet options and does not recognize any of the other
+# telnet commands, but can still be used to connect in line-by-line mode.
+# It's also useful to play with a number of other services,
+# like time, finger, smtp and even ftp.
+#
+# Usage: telnet host [port]
+#
+# The port may be a service name or a decimal port number;
+# it defaults to 'telnet'.
+
+
+import sys, os, time
+from socket import *
+import thread
+
+BUFSIZE = 8*1024
+
+# Telnet protocol characters
+
+IAC  = chr(255)	# Interpret as command
+DONT = chr(254)
+DO   = chr(253)
+WONT = chr(252)
+WILL = chr(251)
+
+def main():
+	host = sys.argv[1]
+	try:
+		hostaddr = gethostbyname(host)
+	except error:
+		sys.stderr.write(sys.argv[1] + ': bad host name\n')
+		sys.exit(2)
+	#
+	if len(sys.argv) > 2:
+		servname = sys.argv[2]
+	else:
+		servname = 'telnet'
+	#
+	if '0' <= servname[:1] <= '9':
+		port = eval(servname)
+	else:
+		try:
+			port = getservbyname(servname, 'tcp')
+		except error:
+			sys.stderr.write(servname + ': bad tcp service name\n')
+			sys.exit(2)
+	#
+	s = socket(AF_INET, SOCK_STREAM)
+	#
+	try:
+		s.connect(host, port)
+	except error, msg:
+		sys.stderr.write('connect failed: ' + `msg` + '\n')
+		sys.exit(1)
+	#
+	thread.start_new(child, (s,))
+	parent(s)
+
+def parent(s):
+	# read socket, write stdout
+	iac = 0		# Interpret next char as command
+	opt = ''	# Interpret next char as option
+	while 1:
+		data, dummy = s.recvfrom(BUFSIZE)
+		if not data:
+			# EOF -- exit
+			sys.stderr.write( '(Closed by remote host)\n')
+			thread.exit_prog(1)
+		cleandata = ''
+		for c in data:
+			if opt:
+				print ord(c)
+				print '(replying: ' + `opt+c` + ')'
+				s.send(opt + c)
+				opt = ''
+			elif iac:
+				iac = 0
+				if c == IAC:
+					cleandata = cleandata + c
+				elif c in (DO, DONT):
+					if c == DO: print '(DO)',
+					else: print '(DONT)',
+					opt = IAC + WONT
+				elif c in (WILL, WONT):
+					if c == WILL: print '(WILL)',
+					else: print '(WONT)',
+					opt = IAC + DONT
+				else:
+					print '(command)', ord(c)
+			elif c == IAC:
+				iac = 1
+				print '(IAC)',
+			else:
+				cleandata = cleandata + c
+		sys.stdout.write(cleandata)
+		sys.stdout.flush()
+##		print 'Out:', `cleandata`
+
+def child(s):
+	# read stdin, write socket
+	while 1:
+		line = sys.stdin.readline()
+##		print 'Got:', `line`
+		s.send(line)
+
+main()
diff --git a/Demo/threads/wpi.py b/Demo/threads/wpi.py
new file mode 100644
index 0000000..e408d21
--- /dev/null
+++ b/Demo/threads/wpi.py
@@ -0,0 +1,74 @@
+# Display digits of pi in a window, calculating in a separate thread.
+# Compare ../scripts/pi.py.
+
+import time
+import thread
+import stdwin
+from stdwinevents import *
+
+digits = []
+
+def worker():
+	k, a, b, a1, b1 = 2l, 4l, 1l, 12l, 4l
+	while 1:
+		# Next approximation
+		p, q, k = k*k, 2l*k+1l, k+1l
+		a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
+		# Print common digits
+		d, d1 = a/b, a1/b1
+		#print a, b, a1, b1
+		while d == d1:
+			digits.append(`int(d)`)
+			a, a1 = 10l*(a%b), 10l*(a1%b1)
+			d, d1 = a/b, a1/b1
+
+def main():
+	digits_seen = 0
+	thread.start_new_thread(worker, ())
+	tw = stdwin.textwidth('0 ')
+	lh = stdwin.lineheight()
+	stdwin.setdefwinsize(20 * tw, 20 * lh)
+	win = stdwin.open('digits of pi')
+	options = win.menucreate('Options')
+	options.additem('Auto scroll')
+	autoscroll = 1
+	options.check(0, autoscroll)
+	while 1:
+		win.settimer(1)
+		type, w, detail = stdwin.getevent()
+		if type == WE_CLOSE:
+			thread.exit_prog(0)
+		elif type == WE_DRAW:
+			(left, top), (right, bottom) = detail
+			digits_seen = len(digits)
+			d = win.begindrawing()
+			for i in range(digits_seen):
+				h = (i % 20) * tw
+				v = (i / 20) * lh
+				if top-lh < v < bottom:
+					d.text((h, v), digits[i])
+			d.close()
+		elif type == WE_TIMER:
+			n = len(digits)
+			if n > digits_seen:
+				win.settitle(`n` + ' digits of pi')
+				d = win.begindrawing()
+				for i in range(digits_seen, n):
+					h = (i % 20) * tw
+					v = (i / 20) * lh
+					d.text((h, v), digits[i])
+				d.close()
+				digits_seen = n
+				height = (v + 20*lh) / (20*lh) * (20*lh)
+				win.setdocsize(0, height)
+				if autoscroll:
+					win.show((0, v), (h+tw, v+lh))
+		elif type == WE_MENU:
+			menu, item = detail
+			if menu == options:
+				if item == 0:
+					autoscroll = (not autoscroll)
+					options.check(0, autoscroll)
+					
+
+main()
