diff --git a/Demo/ibrowse/ifile.py b/Demo/ibrowse/ifile.py
index b8d59ee..7e66fcd 100755
--- a/Demo/ibrowse/ifile.py
+++ b/Demo/ibrowse/ifile.py
@@ -126,7 +126,7 @@
 			topic, ref = text[a1:b1], text[a2:b2]
 			if ref == ':':
 				ref = topic
-			menu.append(topic, ref)
+			menu.append((topic, ref))
 	#
 	# Get the footnotes
 	#
@@ -140,7 +140,7 @@
 		topic, ref = text[a1:b1], text[a2:b2]
 		if ref == ':':
 			ref = topic
-		footnotes.append(topic, ref)
+		footnotes.append((topic, ref))
 	#
 	return node, (prev, next, up), menu, footnotes
 #
diff --git a/Demo/ibrowse/itags.py b/Demo/ibrowse/itags.py
index f30f3fd..7cddcfa 100755
--- a/Demo/ibrowse/itags.py
+++ b/Demo/ibrowse/itags.py
@@ -94,7 +94,7 @@
 		(a,b), (a1,b1), (a2,b2) = match
 		file = buf[a1:b1]
 		offset = eval(buf[a2:b2]) # XXX What if this gets overflow?
-		list.append(file, offset)
+		list.append((file, offset))
 		i = b
 	return list
 
diff --git a/Demo/rpc/nfsclient.py b/Demo/rpc/nfsclient.py
index 1bd5d0d..37ec46c 100644
--- a/Demo/rpc/nfsclient.py
+++ b/Demo/rpc/nfsclient.py
@@ -168,7 +168,7 @@
 			entries, eof = rest
 			last_cookie = None
 			for fileid, name, cookie in entries:
-				list.append(fileid, name)
+				list.append((fileid, name))
 				last_cookie = cookie
 			if eof or last_cookie == None:
 				break
diff --git a/Demo/sgi/gl/mclock.py b/Demo/sgi/gl/mclock.py
index b1dfa1b..6af01ba 100755
--- a/Demo/sgi/gl/mclock.py
+++ b/Demo/sgi/gl/mclock.py
@@ -348,7 +348,7 @@
 	for i in range(Gl.nparts):
 		angle = (a + i*alpha + FULLC) % FULLC
 		value = 255*(Gl.nparts-1-i)/(Gl.nparts-1)
-		list.append(angle, icolor, value)
+		list.append((angle, icolor, value))
 	list.sort()
 	a, icolor, value = list[0]
 	if a <> 0:
@@ -416,7 +416,7 @@
 		Gl.c3i((255, 255, 255)) # White
 		circf(0.0, 0.0, 1.0)
 	else:
-		list.append(3600, 0, 255) # Sentinel
+		list.append((3600, 0, 255)) # Sentinel
 	#
 	rgb = [255, 255, 255]
 	a_prev = 0
diff --git a/Demo/sgi/video/VFile.py b/Demo/sgi/video/VFile.py
index d6c9fc4..f588f4b 100755
--- a/Demo/sgi/video/VFile.py
+++ b/Demo/sgi/video/VFile.py
@@ -590,7 +590,7 @@
 						r, g, b = int(rv*255.0), \
 							  int(gv*255.0), \
 							  int(bv*255.0)
-						map.append(index, r, g, b)
+						map.append((index, r, g, b))
 						if self.color0 == None:
 							self.color0 = \
 								index, r, g, b
@@ -1034,7 +1034,7 @@
 		rv = BasicVinFile.getnextframeheader(self)
 		if self.canseek:
 			pos = self.fp.tell()
-			self.index.append(rv, pos)
+			self.index.append((rv, pos))
 		return rv
 
 	def getrandomframe(self, i):
diff --git a/Demo/stdwin/ibrowse/ibrowse.py b/Demo/stdwin/ibrowse/ibrowse.py
index 41574ad..eec5eb7 100755
--- a/Demo/stdwin/ibrowse/ibrowse.py
+++ b/Demo/stdwin/ibrowse/ibrowse.py
@@ -489,7 +489,7 @@
 	#
 	if win.file and win.node:
 		lastnode = '(' + win.file + ')' + win.node
-		win.last.append(lastnode, win.textobj.getfocus())
+		win.last.append((lastnode, win.textobj.getfocus()))
 	win.file = file
 	win.node = node
 	win.header = header
diff --git a/Demo/stdwin/ibrowse/ifile.py b/Demo/stdwin/ibrowse/ifile.py
index 1ea880e..9447164 100755
--- a/Demo/stdwin/ibrowse/ifile.py
+++ b/Demo/stdwin/ibrowse/ifile.py
@@ -126,7 +126,7 @@
 			topic, ref = text[a1:b1], text[a2:b2]
 			if ref == ':':
 				ref = topic
-			menu.append(topic, ref)
+			menu.append((topic, ref))
 	#
 	# Get the footnotes
 	#
@@ -140,7 +140,7 @@
 		topic, ref = text[a1:b1], text[a2:b2]
 		if ref == ':':
 			ref = topic
-		footnotes.append(topic, ref)
+		footnotes.append((topic, ref))
 	#
 	return node, (prev, next, up), menu, footnotes
 #
diff --git a/Demo/stdwin/ibrowse/itags.py b/Demo/stdwin/ibrowse/itags.py
index f30f3fd..7cddcfa 100755
--- a/Demo/stdwin/ibrowse/itags.py
+++ b/Demo/stdwin/ibrowse/itags.py
@@ -94,7 +94,7 @@
 		(a,b), (a1,b1), (a2,b2) = match
 		file = buf[a1:b1]
 		offset = eval(buf[a2:b2]) # XXX What if this gets overflow?
-		list.append(file, offset)
+		list.append((file, offset))
 		i = b
 	return list
 
diff --git a/Demo/stdwin/wdiff.py b/Demo/stdwin/wdiff.py
index b8c8da3..50ca032 100755
--- a/Demo/stdwin/wdiff.py
+++ b/Demo/stdwin/wdiff.py
@@ -95,7 +95,7 @@
 		if x in ['./', '../']:
 			pass
 		elif x not in b_list:
-			a_only.append(x, a_only_action)
+			a_only.append((x, a_only_action))
 		else:
 			ax = os.path.join(a, x)
 			bx = os.path.join(b, x)
@@ -110,15 +110,15 @@
 				except (RuntimeError, os.error):
 					same = 0
 			if same:
-				ab_same.append(x, ab_same_action)
+				ab_same.append((x, ab_same_action))
 			else:
-				ab_diff.append(x, ab_diff_action)
+				ab_diff.append((x, ab_diff_action))
 	#
 	for x in b_list:
 		if x in ['./', '../']:
 			pass
 		elif x not in a_list:
-			b_only.append(x, b_only_action)
+			b_only.append((x, b_only_action))
 	#
 	return data
 
diff --git a/Demo/tkinter/guido/AttrDialog.py b/Demo/tkinter/guido/AttrDialog.py
index 32b4b7e..4878cb5 100755
--- a/Demo/tkinter/guido/AttrDialog.py
+++ b/Demo/tkinter/guido/AttrDialog.py
@@ -113,7 +113,7 @@
 		self.choices = {}
 		list = []
 		for k, dc in self.options.items():
-			list.append(k, dc)
+			list.append((k, dc))
 		list.sort()
 		for k, (d, c) in list:
 			try:
diff --git a/Demo/tkinter/www/Para.py b/Demo/tkinter/www/Para.py
index 6a7057d..e24471f 100755
--- a/Demo/tkinter/www/Para.py
+++ b/Demo/tkinter/www/Para.py
@@ -67,7 +67,7 @@
 			self.words[i] = fo, te, wi, sp, 0, as, de
 			total = total + wi + sp
 		if total < tab:
-			self.words.append(None, '', 0, tab-total, 0, as, de)
+			self.words.append((None, '', 0, tab-total, 0, as, de))
 	#
 	# Make a hanging tag: tab to hang, increment indent_left by hang,
 	# and reset indent_hang to -hang
