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..be74668f 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
