diff --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py
index a4aefb2..ab84060 100644
--- a/Lib/idlelib/ColorDelegator.py
+++ b/Lib/idlelib/ColorDelegator.py
@@ -37,6 +37,7 @@
         self.prog = prog
         self.idprog = idprog
         self.asprog = asprog
+        self.LoadTagDefs()
 
     def setdelegate(self, delegate):
         if self.delegate is not None:
@@ -52,21 +53,21 @@
             if cnf:
                 apply(self.tag_configure, (tag,), cnf)
         self.tag_raise('sel')
-
-    theme = idleConf.GetOption('main','Theme','name')
-
-    tagdefs = {
-        "COMMENT": idleConf.GetHighlight(theme, "comment"),
-        "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
-        "STRING": idleConf.GetHighlight(theme, "string"),
-        "DEFINITION": idleConf.GetHighlight(theme, "definition"),
-        "SYNC": {'background':None,'foreground':None},
-        "TODO": {'background':None,'foreground':None},
-        "BREAK": idleConf.GetHighlight(theme, "break"),
-        # The following is used by ReplaceDialog:
-        "hit": idleConf.GetHighlight(theme, "hit"),
-        }
     
+    def LoadTagDefs(self):
+        theme = idleConf.GetOption('main','Theme','name')
+        self.tagdefs = {
+            "COMMENT": idleConf.GetHighlight(theme, "comment"),
+            "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
+            "STRING": idleConf.GetHighlight(theme, "string"),
+            "DEFINITION": idleConf.GetHighlight(theme, "definition"),
+            "SYNC": {'background':None,'foreground':None},
+            "TODO": {'background':None,'foreground':None},
+            "BREAK": idleConf.GetHighlight(theme, "break"),
+            # The following is used by ReplaceDialog:
+            "hit": idleConf.GetHighlight(theme, "hit"),
+            }
+        
     if DEBUG: print 'tagdefs',tagdefs
 
     def insert(self, index, chars, tags=None):
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 81d9470..8a2109d 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -102,6 +102,9 @@
             self.vars = flist.vars
         self.menubar = Menu(root)
         self.top = top = self.Toplevel(root, menu=self.menubar)
+        #self.top.instanceDict makes flist.inversedict avalable to
+        #configDialog.py so it can access all EditorWindow instaces
+        self.top.instanceDict=flist.inversedict
         self.vbar = vbar = Scrollbar(top, name='vbar')
         self.text_frame = text_frame = Frame(top)
         self.text = text = Text(text_frame, name='text', padx=5, wrap=None,
@@ -467,6 +470,13 @@
         self.per.removefilter(self.color)
         self.color = None
         self.per.insertfilter(self.undo)
+        
+    def ResetColorizer(self):
+        #this function is called from configDialog.py
+        #to update the colour theme if it is changed
+        if self.color:
+            self.color = self.ColorDelegator()
+            self.per.insertfilter(self.color)
 
     def saved_change_hook(self):
         short = self.short_title()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 9333ea9..fa4bb3d 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -134,23 +134,27 @@
 class ModifiedColorDelegator(ColorDelegator):
 
     # Colorizer for the shell window itself
+    
+    def __init__(self):
+        ColorDelegator.__init__(self)
+        self.LoadTagDefs()
 
     def recolorize_main(self):
         self.tag_remove("TODO", "1.0", "iomark")
         self.tag_add("SYNC", "1.0", "iomark")
         ColorDelegator.recolorize_main(self)
-
-    tagdefs = ColorDelegator.tagdefs.copy()
-    theme = idleConf.GetOption('main','Theme','name')
-
-    tagdefs.update({
-        "stdin": {'background':None,'foreground':None},
-        "stdout": idleConf.GetHighlight(theme, "stdout"),
-        "stderr": idleConf.GetHighlight(theme, "stderr"),
-        "console": idleConf.GetHighlight(theme, "console"),
-        "ERROR": idleConf.GetHighlight(theme, "error"),
-        None: idleConf.GetHighlight(theme, "normal"),
-    })
+    
+    def LoadTagDefs(self):
+        ColorDelegator.LoadTagDefs(self)
+        theme = idleConf.GetOption('main','Theme','name')
+        self.tagdefs.update({
+            "stdin": {'background':None,'foreground':None},
+            "stdout": idleConf.GetHighlight(theme, "stdout"),
+            "stderr": idleConf.GetHighlight(theme, "stderr"),
+            "console": idleConf.GetHighlight(theme, "console"),
+            "ERROR": idleConf.GetHighlight(theme, "error"),
+            None: idleConf.GetHighlight(theme, "normal"),
+        })
 
 class ModifiedUndoDelegator(UndoDelegator):
 
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index aaec2f7..6b9a146 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -23,8 +23,6 @@
         #Theme Elements. Each theme element key is it's display name.
         #The first value of the tuple is the sample area tag name.
         #The second value is the display name list sort index. 
-        #The third value indicates whether the element can have a foreground 
-        #or background colour or both. 
         self.themeElements={'Normal Text':('normal','00'),
             'Python Keywords':('keyword','01'),
             'Python Definitions':('definition','02'),
@@ -180,8 +178,8 @@
         frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
         #frameCustom
         self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,
-            font=('courier',12,''),cursor='hand2',width=10,height=10,
-            takefocus=FALSE,highlightthickness=0)
+            font=('courier',12,''),cursor='hand2',width=21,height=10,
+            takefocus=FALSE,highlightthickness=0,wrap=NONE)
         text=self.textHighlightSample
         text.bind('<Double-Button-1>',lambda e: 'break')
         text.bind('<B1-Motion>',lambda e: 'break')
@@ -514,7 +512,7 @@
         self.AddChangedItem('main','General','editor-on-startup',value)
 
     def ResetChangedItems(self):
-        #changedItems. When any config item is changed in this dialog, an entry
+        #When any config item is changed in this dialog, an entry
         #should be made in the relevant section (config type) of this 
         #dictionary. The key should be the config file section name and the 
         #value a dictionary, whose key:value pairs are item=value pairs for
@@ -1086,14 +1084,15 @@
     def ActivateConfigChanges(self):
         #things that need to be done to make 
         #applied config changes dynamic:
-        #    
         #update editor/shell font and repaint
         #dynamically update indentation setttings
         #update theme and repaint
         #update keybindings and re-bind
         #update user help sources menu
-        pass
-    
+        winInstances=self.parent.instanceDict.keys()
+        for instance in winInstances:
+            instance.ResetColorizer()
+        
     def Cancel(self):
         self.destroy()
 
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
index 9db7120..82bf6d2 100644
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -110,6 +110,13 @@
             self.set(section,option,value)
             return 1
      
+    def RemoveFile(self):
+        """
+        Removes the user config file from disk if it exists.
+        """
+        if os.path.exists(self.file):
+            os.remove(self.file)    
+    
     def Save(self):
         """
         If config isn't empty, write file to disk. If config is empty,
@@ -119,8 +126,7 @@
             cfgFile=open(self.file,'w')
             self.write(cfgFile)
         else:
-            if os.path.exists(self.file):
-                os.remove(self.file)    
+            self.RemoveFile()
 
 class IdleConf:
     """
