diff --git a/gradint-build/Makefile b/gradint-build/Makefile
index 2c3e46926abcd798b9d1843dd5999e51ae465edf..e25a0061e958183ab68cebbb195a97f4d5ea7c9c 100644
--- a/gradint-build/Makefile
+++ b/gradint-build/Makefile
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/p b/gradint-build/p
deleted file mode 100644
index 424669f632f738b4e55588ed5ca3556813fd5237..0000000000000000000000000000000000000000
--- a/gradint-build/p
+++ /dev/null
@@ -1,29 +0,0 @@
---- gradint.py	2009-12-17 17:38:29.000000000 +0000
-+++ /tmp/Gradint.app/gradint.py	2009-12-17 17:52:45.000000000 +0000
-@@ -4320,7 +4320,7 @@
-             try: os.remove(filename)
-             except: pass
-         self.cancelEdit(editEntry,row,col,filename)
--        if row+1 < self.addMoreRow and (row+1,col+1) in self.coords2buttons: self.scrollIntoView(self.coords2buttons[(row+1,col+1)]) # focus the next "synth" button if it exists (TODO do we want to press it as well, like file renaming?)
-+        if row+1 < self.addMoreRow and (row+1,col+1) in self.coords2buttons: self.scrollIntoView(self.coords2buttons[(row+1,col+1)]) # focus the next "synth" button if it exists (don't press it as well like file renaming because it might be a variant etc, TODO can we skip variants?)
-     def cancelEdit(self,editEntry,row,col,filename):
-         editEntry.grid_forget()
-         labelAdded = self.addSynthLabel(filename,row,col)
-@@ -5175,9 +5175,14 @@
- 
- def focusButton(button):
-     button.focus()
--    if macsound: # focus() should display the fact on Windows and Linux, but doesn't on OS X - need to make it default as well
--        try: button.config(state="active")
--        except: pass # maybe not a button
-+    if macsound: # focus() should display the fact on Windows and Linux, but doesn't on OS X so:
-+        def flashButton(button,state):
-+            try: button.config(state=state)
-+            except: pass # maybe not a button
-+        for t in range(250,1000,250): # (NB avoid epilepsy's 5-30Hz!)
-+          app.after(t,lambda *args:flashButton(button,"active"))
-+          app.after(t+150,lambda *args:flashButton(button,"normal"))
-+        # (Don't like flashing, but can't make it permanently active as it won't change when the focus does)
- 
- def startTk():
-     class Application(Tkinter.Frame):
diff --git a/gradint-build/src/booktime.py b/gradint-build/src/booktime.py
index c375d61754bef48d5fdd65fcf6340bf770c2233f..b01cd41b800c31d410444390f94a4726bf1cab9c 100644
--- a/gradint-build/src/booktime.py
+++ b/gradint-build/src/booktime.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/filescan.py b/gradint-build/src/filescan.py
index 40e3e77880fed20e2c3290e58b9a421550d52df6..b6629d63ba501666580717468be4d79ba58d454c 100644
--- a/gradint-build/src/filescan.py
+++ b/gradint-build/src/filescan.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
@@ -127,7 +127,7 @@ def getLsDic(directory):
                 continue
         lsDic[(file+extsep)[:file.find(extsep)]] = val # (this means if there's both mp3 and wav, wav will overwrite as comes later)
     if has_variants:
-        ls=list2set(ls)
+        ls=list2set(ls) ; newVs = []
         for k,v in lsDic.items():
             # check for _lang_variant.ext and take out the _variant,
             # but keep them in variant_files dict for fileToEvent to put back
@@ -145,7 +145,8 @@ def getLsDic(directory):
                 variantFiles[dir_newV] = []
                 if newV in ls: variantFiles[dir_newV].append(newV) # the no-variants name is also a valid option
             variantFiles[dir_newV].append(v)
-        random.shuffle(variantFiles[dir_newV])
+            newVs.append(dir_newV)
+        for v in newVs: random.shuffle(variantFiles[v])
     return lsDic
 
 def scanSamples_inner(directory,retVal,doLimit):
diff --git a/gradint-build/src/frontend.py b/gradint-build/src/frontend.py
index b0e738ae61532594842d60bc9c3a14117b2dde32..d3f9f14f6eb2d699baca03ad42648cc6c21ef6b2 100644
--- a/gradint-build/src/frontend.py
+++ b/gradint-build/src/frontend.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/lessonplan.py b/gradint-build/src/lessonplan.py
index 995e34785eee5ef978d24099096ce1708cf21d13..0d443c4352b94059b94c8f064ccea0d816bde4ab 100644
--- a/gradint-build/src/lessonplan.py
+++ b/gradint-build/src/lessonplan.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/loop.py b/gradint-build/src/loop.py
index 05cfb2120e909b760f6123566921cbc79d954e33..0396baeed979668442af8cdc0fa1e0113c75e6e6 100644
--- a/gradint-build/src/loop.py
+++ b/gradint-build/src/loop.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/makeevent.py b/gradint-build/src/makeevent.py
index 1944fdebab5bfc1af0b974c71107f300319832b9..4d72540bf219225ffbe86d72c68f0b0a46b81b2e 100644
--- a/gradint-build/src/makeevent.py
+++ b/gradint-build/src/makeevent.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/play.py b/gradint-build/src/play.py
index a24a941656e046245403cad4dc348c5ca51c8a72..b2ec38c2565ff3dec8b03a25a9b51897bfc91356 100644
--- a/gradint-build/src/play.py
+++ b/gradint-build/src/play.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/recording.py b/gradint-build/src/recording.py
index 55abbd998ed36c06fe3542725196db74eccc91f3..6e14e3b505cc8a45cfc7eeeb76e2efba21a78f12 100644
--- a/gradint-build/src/recording.py
+++ b/gradint-build/src/recording.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/sequence.py b/gradint-build/src/sequence.py
index ca53c4930cefd90f870ed524d950f827d257005e..5c8a61a9b0c0adad03a64a1f252dcd845714f11d 100644
--- a/gradint-build/src/sequence.py
+++ b/gradint-build/src/sequence.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/synth.py b/gradint-build/src/synth.py
index c017933a58354dc016aaa992dae859f5e0ce907d..2339f6b0af4b2496c977aca0ab65a41faaebc1a2 100644
--- a/gradint-build/src/synth.py
+++ b/gradint-build/src/synth.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
@@ -340,7 +340,7 @@ class ESpeakSynth(Synth):
         if pickle and fileExists(espeakTranslitCacheFile):
             try: placeStat,tc = pickle.Unpickler(open(espeakTranslitCacheFile,"rb")).load()
             except: placeStat,tc = (),{}
-            if placeStat==tuple(os.stat(self.place)): self.translitCache = tc # otherwise regenerate it because eSpeak installation has changed
+            if placeStat==tuple(os.stat(self.place)): self.translitCache = tc # otherwise regenerate it because eSpeak installation has changed (TODO if you overwrite an existing _dict file in-place, it might not update the stat() of espeak-data and the cache might not be re-generated when it should; espeak's --compile seems ok though)
         if self.place: self.place=self.place[:self.place.rindex(os.sep)] # drop the \espeak-data, so can be used in --path=
     def _add_lang(self,lang,fname):
         if ("-" in lang and not lang=="zh-yue") or "~" in lang: return # variants and emacs backup files
diff --git a/gradint-build/src/system.py b/gradint-build/src/system.py
index 4f47b734edb99c6c75495715c2f27e56d08281d4..ea873ceed5c548c7ed3a354372c155dec141cdae 100644
--- a/gradint-build/src/system.py
+++ b/gradint-build/src/system.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or
diff --git a/gradint-build/src/top.py b/gradint-build/src/top.py
index 1b7b6774b83487319fcc3214f4d8f0b3fb959309..2c76e16bad11fcf140159b7983fb67e60ce0f6be 100644
--- a/gradint-build/src/top.py
+++ b/gradint-build/src/top.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-program_name = "gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+."
+program_name = "gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+."
 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
diff --git a/gradint-build/thindown.py b/gradint-build/thindown.py
index 3a34f7740d7794549346576c74bddef27d869ab0..52633867fdb5999f361848780789caa9610677f8 100644
--- a/gradint-build/thindown.py
+++ b/gradint-build/thindown.py
@@ -1,5 +1,5 @@
 # This file is part of the source code of
-# gradint v0.9945 (c) 2002-2009 Silas S. Brown. GPL v3+.
+# gradint v0.9946 (c) 2002-2009 Silas S. Brown. GPL v3+.
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 3 of the License, or