Changes for Canvas by Fred
diff --git a/Lib/tkinter/Canvas.py b/Lib/tkinter/Canvas.py
index 65f87f6..4fdc578 100755
--- a/Lib/tkinter/Canvas.py
+++ b/Lib/tkinter/Canvas.py
@@ -1,17 +1,7 @@
 # This module exports classes for the various canvas item types
 
-from Tkinter import Canvas
+from Tkinter import Canvas, _flatten
 
-from types import *
-
-def _flatten(tuple):
-	res = ()
-	for item in tuple:
-		if type(item) in (TupleType, ListType):
-			res = res + _flatten(item)
-		elif item is not None:
-			res = res + (item,)
-	return res
 
 class CanvasItem:
 	def __init__(self, canvas, itemType, *args, **kw):
@@ -85,41 +75,41 @@
 		return self.canvas.type(self.id)
 
 class Arc(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'arc', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'arc') + args, kw)
 
 class Bitmap(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'bitmap', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'bitmap') + args, kw)
 
 class ImageItem(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'image', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'image') + args, kw)
 
 class Line(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'line', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'line') + args, kw)
 
 class Oval(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'oval', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'oval') + args, kw)
 
 class Polygon(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'polygon', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'polygon') + args, kw)
 
 class Rectangle(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'rectangle', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'rectangle') + args, kw)
 
 # XXX "Text" is taken by the Text widget...
 class CanvasText(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'text', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'text') + args, kw)
 
 class Window(CanvasItem):
-	def __init__(self, canvas, *args):
-		CanvasItem.__init__(self, canvas, 'window', args)
+    def __init__(self, canvas, *args, **kw):
+	apply(CanvasItem.__init__, (self, canvas, 'window') + args, kw)
 
 class Group:
 	def __init__(self, canvas, tag=None):
diff --git a/Lib/tkinter/Tkinter.py b/Lib/tkinter/Tkinter.py
index 5cab21d..b241f06 100755
--- a/Lib/tkinter/Tkinter.py
+++ b/Lib/tkinter/Tkinter.py
@@ -935,20 +935,20 @@
 		Widget.__init__(self, master, 'canvas', cnf, kw)
 	def addtag(self, *args):
 		self._do('addtag', args)
-	def addtag_above(self, tagOrId):
-		self.addtag('above', tagOrId)
-	def addtag_all(self):
-		self.addtag('all')
-	def addtag_below(self, tagOrId):
-		self.addtag('below', tagOrId)
-	def addtag_closest(self, x, y, halo=None, start=None):
-		self.addtag('closest', x, y, halo, start)
-	def addtag_enclosed(self, x1, y1, x2, y2):
-		self.addtag('enclosed', x1, y1, x2, y2)
-	def addtag_overlapping(self, x1, y1, x2, y2):
-		self.addtag('overlapping', x1, y1, x2, y2)
-	def addtag_withtag(self, tagOrId):
-		self.addtag('withtag', tagOrId)
+	def addtag_above(self, newtag, tagOrId):
+		self.addtag(newtag, 'above', tagOrId)
+	def addtag_all(self, newtag):
+		self.addtag(newtag, 'all')
+	def addtag_below(self, newtag, tagOrId):
+		self.addtag(newtag, 'below', tagOrId)
+	def addtag_closest(self, newtag, x, y, halo=None, start=None):
+		self.addtag(newtag, 'closest', x, y, halo, start)
+	def addtag_enclosed(self, newtag, x1, y1, x2, y2):
+		self.addtag(newtag, 'enclosed', x1, y1, x2, y2)
+	def addtag_overlapping(self, newtag, x1, y1, x2, y2):
+		self.addtag(newtag, 'overlapping', x1, y1, x2, y2)
+	def addtag_withtag(self, newtag, tagOrId):
+		self.addtag(newtag, 'withtag', tagOrId)
 	def bbox(self, *args):
 		return self._getints(self._do('bbox', args)) or None
 	def tag_unbind(self, tagOrId, sequence):