diff --git a/Lib/tkinter/Tkinter.py b/Lib/tkinter/Tkinter.py
index f55b804..8b5d94f 100755
--- a/Lib/tkinter/Tkinter.py
+++ b/Lib/tkinter/Tkinter.py
@@ -11,6 +11,8 @@
 FunctionType = type(_isfunctype)
 ClassType = type(_Dummy)
 MethodType = type(_Dummy.meth)
+TupleType = type(())
+ListType = type([])
 
 def _tkerror(err):
 	pass
@@ -518,7 +520,7 @@
 		del self.master.children[self._name]
 		self.tk.call('destroy', self._w)
 	def _do(self, name, args=()):
-		apply(self.tk.call, (self._w, name) + args) 
+		return apply(self.tk.call, (self._w, name) + args) 
 
 class Toplevel(Widget, Wm):
 	def __init__(self, master=None, cnf={}):
@@ -594,26 +596,26 @@
 			args = args[:-1]
 		else:
 			cnf = {}
-		v = (self._w, 'create', itemType) + args
+		v = (self._w, 'create', itemType) + _flatten(args)
 		for k in cnf.keys():
 			v = v + ('-' + k, cnf[k])
 		return self.tk.getint(apply(self.tk.call, v))
 	def create_arc(self, *args):
-		Canvas._create(self, 'arc', args)
+		return Canvas._create(self, 'arc', args)
 	def create_bitmap(self, *args):
-		Canvas._create(self, 'bitmap', args)
+		return Canvas._create(self, 'bitmap', args)
 	def create_line(self, *args):
-		Canvas._create(self, 'line', args)
+		return Canvas._create(self, 'line', args)
 	def create_oval(self, *args):
-		Canvas._create(self, 'oval', args)
+		return Canvas._create(self, 'oval', args)
 	def create_polygon(self, *args):
-		Canvas._create(self, 'polygon', args)
+		return Canvas._create(self, 'polygon', args)
 	def create_rectangle(self, *args):
-		Canvas._create(self, 'rectangle', args)
+		return Canvas._create(self, 'rectangle', args)
 	def create_text(self, *args):
-		Canvas._create(self, 'text', args)
+		return Canvas._create(self, 'text', args)
 	def create_window(self, *args):
-		Canvas._create(self, 'window', args)
+		return Canvas._create(self, 'window', args)
 	def dchars(self, *args):
 		self._do('dchars', args)
 	def delete(self, *args):
@@ -670,6 +672,15 @@
 	def yview(self, index):
 		self.tk.call(self._w, 'yview', index)
 
+def _flatten(tuple):
+	res = ()
+	for item in tuple:
+		if type(item) in (TupleType, ListType):
+			res = res + _flatten(item)
+		else:
+			res = res + (item,)
+	return res
+
 class Checkbutton(Widget):
 	def __init__(self, master=None, cnf={}):
 		Widget.__init__(self, master, 'checkbutton', cnf)
