diff --git a/Mac/Demo/example2/InterslipControl-2.py b/Mac/Demo/example2/InterslipControl-2.py
new file mode 100644
index 0000000..661c4a4
--- /dev/null
+++ b/Mac/Demo/example2/InterslipControl-2.py
@@ -0,0 +1,116 @@
+import FrameWork
+import EasyDialogs
+import Res
+import Dlg
+import sys
+import interslip
+#
+# Definitions for our resources
+ID_MAIN=512
+ID_ABOUT=513
+
+ITEM_CONNECT=1
+ITEM_DISCONNECT=2
+ITEM_STATUS=3
+ITEM_MESSAGE=4
+
+status2text = ["<idle>", "<wait-modem>", "<dialling>", "<logging in>", 
+	"<connected>", "<disconnecting>"]
+
+def main():
+	try:
+		interslip.open()
+	except interslip.error, arg:
+		EasyDialogs.Message("Cannot open interslip: "+arg[1])
+		sys.exit(1)	
+	try:
+		dummy = Res.GetResource('DLOG', ID_MAIN)
+	except Res.Error:
+		try:
+			Res.OpenResFile("InterslipControl-2.rsrc")
+		except Res.error:
+			EasyDialogs.Message("Cannot open InterslipControl-2.rsrc: "+arg[1])
+			sys.exit(1)	
+	InterslipControl()
+	
+class InterslipControl(FrameWork.Application):
+	"Application class for InterslipControl"
+	
+	def __init__(self):
+		# First init menus, etc.
+		FrameWork.Application.__init__(self)
+		# Next create our dialog
+		self.main_dialog = MyDialog(self)
+		# Now open the dialog
+		self.main_dialog.open(ID_MAIN)
+		# Finally, go into the event loop
+		self.mainloop()
+	
+	def makeusermenus(self):
+		self.filemenu = m = FrameWork.Menu(self.menubar, "File")
+		self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
+	
+	def quit(self, *args):
+		raise self
+		
+	def do_about(self, *args):
+		f = Dlg.GetNewDialog(ID_ABOUT, -1)
+		while 1:
+			n = Dlg.ModalDialog(None)
+			if n == 1:
+				return
+				
+	def idle(self):
+		"Idle routine - update status"
+		self.main_dialog.updatestatus()
+		
+class MyDialog(FrameWork.DialogWindow):
+	"Main dialog window for InterslipControl"
+	def __init__(self, parent):
+		FrameWork.DialogWindow.__init__(self, parent)
+		self.last_status = None
+		self.last_msgnum = None
+	
+	def do_itemhit(self, item, event):
+		if item == ITEM_DISCONNECT:
+			self.disconnect()
+		elif item == ITEM_CONNECT:
+			self.connect()
+
+	def connect(self):
+		try:
+			interslip.connect()
+		except interslip.error, arg:
+			EasyDialogs.Message("Cannot connect: "+arg[1])
+
+	def disconnect(self):
+		try:
+			interslip.disconnect()
+		except interslip.error, arg:
+			EasyDialogs.Message("Cannot disconnect: "+arg[1])
+			
+	def updatestatus(self):
+		try:
+			status, msgnum, msg = interslip.status()
+		except interslip.error, arg:
+			EasyDialogs.Message("Cannot get status: "+arg[1])
+			sys.exit(1)
+		if status == self.last_status and msgnum == self.last_msgnum:
+			return
+		self.last_status = status
+		self.last_msgnum = msgnum
+		if msgnum == 0:
+			msg = ''
+		
+		try:
+			txt = status2text[status]
+		except IndexError:
+			txt = "<unknown state %d>"%status
+
+		tp, h, rect = self.wid.GetDialogItem(ITEM_STATUS)
+		Dlg.SetDialogItemText(h, txt)
+		
+		tp, h, rect = self.wid.GetDialogItem(ITEM_MESSAGE)
+		Dlg.SetDialogItemText(h, msg)
+
+main()
diff --git a/Mac/Demo/example2/InterslipControl-2.rsrc.hqx b/Mac/Demo/example2/InterslipControl-2.rsrc.hqx
new file mode 100644
index 0000000..f940bf6
--- /dev/null
+++ b/Mac/Demo/example2/InterslipControl-2.rsrc.hqx
@@ -0,0 +1,55 @@
+(This file must be converted with BinHex 4.0)
+:&dPZG'9bFfaTF%0[ER4bEf`Y-LjbFh*M!(*cFQ058d9%!*!)$2eid3#3"!%!N!-
+,T!!!#U3!!!&CCQBd4$9%-%3a4$*%-a*QCM-c0%8e46"&-88b46-5CQBA5@jdCA*
+cE'P`3fpZG(*[E#db,R*cFQ-#!!)!FR0bB`)!FR0bBe*6483"!!!d!)!!N"+X``N
+h!*!'$2dcN!3d)!!e)!!`)!!a)!!b)!!c%M-c!!!d)!%e)!%`)!%a)!%b)!%c5b@
+U5bQU5bUU5bZU5bbU5bfU5bkU5bp,0kT,1+T,1DT,1UT,1kT,2+T,2DT,2UT,2kT
+,3+T,3DT,3UT,3kT,4+T,4DT,4UT,4kT,5+T,5DT,5UT,)!#U5b!!N!-9!'B!KJ$
+&!GB!!!%!!3#3"3)!N!89!'!!E!%@!AJ!!3%!!3#3"3)"!*!%(&"C9'N!N!-"4P*
+&4J#3"B"*3diM!*!&J!#3!`G"8&"-!*!&!3!!!3!!%!+!!!3%3!"%##!!9I!3!&%
+J#!"3i!3!8-!#!"2`!3"6m!#!4rJ13%ri%5"Ar#U3!'rm3%K2r&9%crj!3Rrq+S&
+rrK%#(rm1"#hr!)JVIbp3+b9HS'PPS%"T*B#!Irq"!!!J!J!!%!3!!!J)!!!%%!!
+!!L!!!!&!!*!$J!!!!3!!%!1!!!3(`!"%$q!!9Ir`!&(rq!"3rr`!82rq!"2rr`"
+6rrq!4rrr`%rrrq"Irrr`Irrrq(rrrrcrN!2qIrq3!hrrrriIrrrm2rrrq$rrrr!
+rrrrJIrrr`(rrri"rrrm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!!!F!!N!1!!*!$"!#
+3%2m!N"2r!*!+r`$r!*!8r`#3"rm!+`$r!*!2r`#3!rm!N!Er!#Z3!`$r!*!1r`$
+r!2m!X*!%r`!VN!8!r`#3$Im!r`#3!l!!!,!VN!J!r`#3$2m!r`#3",#`qT!$+j!
+(!2m!N![r!2m!N!5`X2U3!bZ3#!$r!*!-r`!!X*!'+j!+!2m!N!Rr!2m!!,#3"LZ
+3#`$r!*!)r`#3!l#3#2SVN!Emrr`V!2m!N!Ir!!$rX*!)qLZ3"2Q*+j!$LIN!r`#
+3"[m!r`#`N!MkqLZ3!iNVL5Z*+r`V!2m!N!Arr`#`N!Vk+b[m+j!(r#X!r`#3"2m
+!+l#3#[SV+rmVL5Z*+iNVrbXV!2m!!2rr+bZ`N!VkqL[m+j!(r#Z3!`$r!!$rr,#
+3$2SV+r`VL5Z*+iNVN!Er!2rrX*!-qLXVqBNVN!1*q5Z3"2Vr!*!%X*!-q[SVN!2
+mrr`VN!Akr`#3",!&X,!&X*!*qLZ3"rmV+rVr!*!&X!@`"E#`"E#3"rSVrb[rN!6
+jrrVr!*!'X!@`"E#`"3@`"3@`"E$krrRrN!3VrrVr!*!'X,!&X!8&X!@`X!8&X!@
+`X#[r+j!&q[m!N!H`X!@`"3@`"3@`"3@`"E#`qLZ3"IVr!*!)X*!3q[SVN!2kr`#
+3%[rkN!JV+rVr!*!8rrU3"b[kr`#3&[rk+j!&q[m!N"MrqLZ3!rVr!*!DrrSVq[m
+!N"crq[m!N"lr!*!4!J#3#!m!N!N2!*!&m2!!N!N2!*!$$``2!*!($`!2!*!$m-c
+!m!#3"Jq3!`99A`c-c!m!N!B2$`!&!&c-N!2!m!#3"3m2!!"9hGc-N!-2!*!&$`m
+!!&AGh-b3!m$`!*!&$`"9N!2-N!82!*!%$`m!9C!$c*!&`2!!N!-2!!99N!0Gc*!
+$lq`2!*!$$`$e9C!$AFc-fXc+d2!!!!m2"9@3!ehFc+b3!q`2!!!2m&@3"Gc1c*!
+$cX$`!!m-9C!&h-r+N!22c!m!rma9N!AGcXb3!ml-`2!2j9@3"9h-l+b3!mc-c`r
+e9C!&AFcDc-VFc-h`!!99N!9Gh-c[l-c-h`!!89899C!%h-b3!rc0m!!!89&9&9@
+3!pcmrrrIh`#3!e&494&4&4AIhrrmrI!!!!9484898489A2c-c0m!N!-&89%9%9%
+9&9h-c-h`!*!$"9@3"ehFc0m!N!RphC!$h-h`!*!*$pf3!pcI!*!,rFc-cI!!N!X
+2h-cI!*!0rFh`!*!0$pm!N!r`!*!*!3#3"Im!N!2r!*!*r`$r!!$r!2m!N!cr!#X
+!r`#3#[m!+j!$!2m!N!Er!,#3!bZ3"!$r!*!&rrm!X2Rj+j!%!2m!N!6r!,#3!bZ
+3!rQ*+`$r!!$rrbZ`N!2j+bZ*q5Z3!rm!!2q`N!Aj+j!%qIm!N!5`N!Aj+rrrqIm
+!N!5`"E!&X!@`q5[jr`#3"E#3"rRjr`#3#[rjN!2r!*!-rrRr!*!1r`#3'S!!!2!
+!m!#3"2$`$`m!N!E``2!!N!32$-`2!*!$m&9Fc-$`!!$r"Gh-c!m!!2"9A-cD`2!
+2r&9Gc+h-c`$e99AFc-h`!!999Gcrh`!!8C!$AFh`!!"9N!0Gh`#3"IhGm!#3"3r
+I!*!(m!#3$N!)J#P!!L!%%#i)0!3Z%QiK2`)I0#U)2j!!!L!"3!#!!!!)J#R!!q!
+(m#ri2r`rrRrr2riIr$ri2r!$i!(!!)!!N!9i!!8!N!8m!!S!8!"@"!G$EfjZC@0
+d!*!'2!$`!&!"433+4'PcBfpZEQ9MG!#3"3S!@J!D!8D)!*!'(J"D!#i"4SJ!N!B
++!!S!'J"9L!G6G'&dGA-km!#3"4i!#J!Z!&@)#%ePFh0KCf8k!*!$CJ!$!*!&PJ"
+a!+S!U`3#6dX!N!8+!(%!5J#aS!)#!3#3"9!!9!"J!-Q)%8PZG'9bFfaTF#"$Efj
+dFQpXB3#3"@i!2!#$!1')&NTKBfXJ5Q&ZFf9Z,#"$9dNX)$%j168!N!1!!!%!!"!
+#J!!%"%!!4!JJ!&A`%!"4)!J!81!%!&$!!J!6m!%!8r!!J%Ii$N"2q"%J9r`UN!"
+[r%")6ra94-rq3%*rrLU"Iri4!Krr$J3Yr`#)+hm[8#XPAU"TCD"!D5@!J(rrJ3!
+!)!)!!"!%!!!)#!!!""!!!!)J!!!"3!#3!i!!N!3"!*!$!3#3!`ZN!!!+T!!!!9N
+!a!8%%Pi!N!-F!5B!#d4-6dF!!3"L4%P86!!"!(T#6N4-!*!$NNC548B!N!1H580
+1)`#3!kTTBf`i!*!$YQPME$3!N!2#D@0c1!#3!mjTBh-d!*!$fQPMFb-!N!2Q580
+26J#3!r*3@94T!*!$rJ)!N!X#!3!2!*!$'3#3"!)!rrm!!!Ne!*!%!J(rr`!!#E%
+!N!@!rrm!N!-b!-3$U!#!rrm!N!05!-3#X!#!rrm!N!0G!-3#Y!#!rrm!!!&K!-3
+#1!#!rrm!!!9P!-3$D!#!rrm!!!GT!-3#+!#!rrm!!!KY!-3#2!#!rrm!!!Ma!-3
+#3!)"!"N!!!SE!*!(*!!!#Tm!a!)X$N0[ER4bEf`J4'PKE'pR#8&LEh9d)'*[H!T
+"BQpeG#"*BfpZ$NphEQ9b)(*PFfpeFQ0PITS:
