diff --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py
index cc92259..d72d90c 100644
--- a/Lib/idlelib/ColorDelegator.py
+++ b/Lib/idlelib/ColorDelegator.py
@@ -50,7 +50,7 @@
     def config_colors(self):
         for tag, cnf in self.tagdefs.items():
             if cnf:
-                apply(self.tag_configure, (tag,), cnf)
+                self.tag_configure(tag, **cnf)
         self.tag_raise('sel')
 
     def LoadTagDefs(self):
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 6deb4f2..d574b05 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -792,7 +792,7 @@
         text.keydefs = keydefs
         for event, keylist in keydefs.items():
             if keylist:
-                apply(text.event_add, (event,) + tuple(keylist))
+                text.event_add(event, *keylist)
 
     def fill_menus(self, defs=None, keydefs=None):
         """Add appropriate entries to the menus and submenus
diff --git a/Lib/idlelib/MultiStatusBar.py b/Lib/idlelib/MultiStatusBar.py
index dd6d041..2d4c547 100644
--- a/Lib/idlelib/MultiStatusBar.py
+++ b/Lib/idlelib/MultiStatusBar.py
@@ -5,7 +5,7 @@
     def __init__(self, master=None, **kw):
         if master is None:
             master = Tk()
-        apply(Frame.__init__, (self, master), kw)
+        Frame.__init__(self, master, **kw)
         self.labels = {}
 
     def set_label(self, name, text='', side=LEFT):
diff --git a/Lib/idlelib/OutputWindow.py b/Lib/idlelib/OutputWindow.py
index 99e47e4..787e9b0 100644
--- a/Lib/idlelib/OutputWindow.py
+++ b/Lib/idlelib/OutputWindow.py
@@ -13,7 +13,7 @@
     """
 
     def __init__(self, *args):
-        apply(EditorWindow.__init__, (self,) + args)
+        EditorWindow.__init__(self, *args)
         self.text.bind("<<goto-file-line>>", self.goto_file_line)
 
     # Customize EditorWindow
@@ -136,7 +136,7 @@
         text = owin.text
         for tag, cnf in self.tagdefs.items():
             if cnf:
-                apply(text.tag_configure, (tag,), cnf)
+                text.tag_configure(tag, **cnf)
         text.tag_raise('sel')
         self.write = self.owin.write
 
diff --git a/Lib/idlelib/Percolator.py b/Lib/idlelib/Percolator.py
index 5682111..ebbcba9 100644
--- a/Lib/idlelib/Percolator.py
+++ b/Lib/idlelib/Percolator.py
@@ -59,10 +59,10 @@
             Delegator.__init__(self, None)
         def insert(self, *args):
             print self.name, ": insert", args
-            apply(self.delegate.insert, args)
+            self.delegate.insert(*args)
         def delete(self, *args):
             print self.name, ": delete", args
-            apply(self.delegate.delete, args)
+            self.delegate.delete(*args)
     root = Tk()
     root.wm_protocol("WM_DELETE_WINDOW", root.quit)
     text = Text()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 48b912d..47028bd 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -77,7 +77,7 @@
 
     def __init__(self, *args):
         self.breakpoints = []
-        apply(EditorWindow.__init__, (self,) + args)
+        EditorWindow.__init__(self, *args)
         self.text.bind("<<set-breakpoint-here>>", self.set_breakpoint_here)
         self.text.bind("<<clear-breakpoint-here>>", self.clear_breakpoint_here)
         self.text.bind("<<open-python-shell>>", self.flist.open_shell)
diff --git a/Lib/idlelib/TreeWidget.py b/Lib/idlelib/TreeWidget.py
index e30eeae..824bdca 100644
--- a/Lib/idlelib/TreeWidget.py
+++ b/Lib/idlelib/TreeWidget.py
@@ -414,7 +414,7 @@
         self.frame = Frame(master)
         self.frame.rowconfigure(0, weight=1)
         self.frame.columnconfigure(0, weight=1)
-        self.canvas = apply(Canvas, (self.frame,), opts)
+        self.canvas = Canvas(self.frame, **opts)
         self.canvas.grid(row=0, column=0, sticky="nsew")
         self.vbar = Scrollbar(self.frame, name="vbar")
         self.vbar.grid(row=0, column=1, sticky="nse")
diff --git a/Lib/idlelib/WidgetRedirector.py b/Lib/idlelib/WidgetRedirector.py
index b49ccf1..be74668 100644
--- a/Lib/idlelib/WidgetRedirector.py
+++ b/Lib/idlelib/WidgetRedirector.py
@@ -51,7 +51,7 @@
         m = self.dict.get(cmd)
         try:
             if m:
-                return apply(m, args)
+                return m(*args)
             else:
                 return self.tk.call((self.orig, cmd) + args)
         except TclError:
@@ -84,7 +84,7 @@
     global orig_insert
     def my_insert(*args):
         print "insert", args
-        apply(orig_insert, args)
+        orig_insert(*args)
     orig_insert = redir.register("insert", my_insert)
     root.mainloop()
 
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index af3e98a..8c3eb3e 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -794,8 +794,7 @@
         if self.fgHilite.get(): plane='foreground'
         else: plane='background'
         sampleElement=self.themeElements[self.highlightTarget.get()][0]
-        apply(self.textHighlightSample.tag_config,
-                (sampleElement,),{plane:newColour})
+        self.textHighlightSample.tag_config(sampleElement, **{plane:newColour})
         theme=self.customTheme.get()
         themeElement=sampleElement+'-'+plane
         self.AddChangedItem('highlight',theme,themeElement,newColour)
@@ -890,7 +889,7 @@
                     colours['foreground']=themeDict[element+'-foreground']
                 if themeDict.has_key(element+'-background'):
                     colours['background']=themeDict[element+'-background']
-            apply(self.textHighlightSample.tag_config,(element,),colours)
+            self.textHighlightSample.tag_config(element, **colours)
         self.SetColourSample()
 
 ##     def OnCheckUserHelpBrowser(self):
diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py
index df024e7..b550ec1 100644
--- a/Lib/idlelib/keybindingDialog.py
+++ b/Lib/idlelib/keybindingDialog.py
@@ -188,8 +188,7 @@
         #make a tuple of most of the useful common 'final' keys
         keys=(self.alphanumKeys+self.punctuationKeys+self.functionKeys+
                 self.whitespaceKeys+self.editKeys+self.moveKeys)
-        apply(self.listKeysFinal.insert,
-            (END,)+keys)
+        self.listKeysFinal.insert(END, *keys)
 
     def TranslateKey(self,key):
         #translate from key list value to tkinter key-id
