First work on making config changes dynamic,
dynamic theme changes
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:
     """