diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 0f0df28..1ec735f 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,10 @@
 
 *Release date: XX-XXX-2003*
 
+- Keybindings with the Shift modifier now work correctly.  So do bindings which
+  use the Space key.  Limit unmodified user keybindings to the function keys.
+  Python Bug 775353, IDLEfork Bugs 755647, 761557
+
 - After an exception, run.py was not setting the exception vector. Noam
   Raphael suggested correcting this so pdb's postmortem pm() would work. 
   IDLEfork Patch 844675
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 81ef88e..b6205ca 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -16,7 +16,12 @@
 import linecache
 from code import InteractiveInterpreter
 
-from Tkinter import *
+try:
+    from Tkinter import *
+except ImportError:
+    print>>sys.__stderr__, "** IDLE can't import Tkinter.  " \
+                           "Your Python may not be configured for Tk. **"
+    sys.exit(1)
 import tkMessageBox
 
 from EditorWindow import EditorWindow, fixwordbreaks
diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def
index ceb424f..392592b 100644
--- a/Lib/idlelib/config-keys.def
+++ b/Lib/idlelib/config-keys.def
@@ -30,10 +30,10 @@
 open-window-from-file=<Control-Key-o>
 plain-newline-and-indent=<Control-Key-j>
 print-window=<Control-Key-p>
-redo=<Control-Shift-Key-z>
+redo=<Control-Shift-Key-Z>
 remove-selection=<Key-Escape>
-save-copy-of-window-as-file=<Alt-Shift-Key-s>
-save-window-as-file=<Control-Shift-Key-s>
+save-copy-of-window-as-file=<Alt-Shift-Key-S>
+save-window-as-file=<Control-Shift-Key-S>
 save-window=<Control-Key-s>
 select-all=<Control-Key-a>
 toggle-auto-coloring=<Control-Key-slash>
@@ -78,7 +78,7 @@
 plain-newline-and-indent=<Control-Key-j>
 print-window=<Control-x><Control-Key-p>
 python-docs=<Control-Key-h>
-python-context-help=<Control-Shift-Key-h>
+python-context-help=<Control-Shift-Key-H>
 redo=<Alt-Key-z> <Meta-Key-z>
 remove-selection=<Key-Escape>
 save-copy-of-window-as-file=<Control-Key-x><Control-Key-y>
@@ -128,9 +128,9 @@
 open-window-from-file=<Command-Key-o>
 plain-newline-and-indent=<Control-Key-j>
 print-window=<Command-Key-p>
-redo=<Shift-Command-Key-z>
+redo=<Shift-Command-Key-Z>
 remove-selection=<Key-Escape>
-save-window-as-file=<Shift-Command-Key-s>
+save-window-as-file=<Shift-Command-Key-S>
 save-window=<Command-Key-s>
 save-copy-of-window-as-file=<Option-Command-Key-s>
 select-all=<Command-Key-a>
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
index fd9cbc4..3d79fb9 100644
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -531,7 +531,7 @@
             '<<print-window>>': ['<Control-p>'],
             '<<redo>>': ['<Control-y>'],
             '<<remove-selection>>': ['<Escape>'],
-            '<<save-copy-of-window-as-file>>': ['<Alt-Shift-s>'],
+            '<<save-copy-of-window-as-file>>': ['<Alt-Shift-S>'],
             '<<save-window-as-file>>': ['<Alt-s>'],
             '<<save-window>>': ['<Control-s>'],
             '<<select-all>>': ['<Alt-a>'],
diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py
index b550ec1..200936a 100644
--- a/Lib/idlelib/keybindingDialog.py
+++ b/Lib/idlelib/keybindingDialog.py
@@ -1,5 +1,5 @@
 """
-dialog for building tkinter accelerator key bindings
+Dialog for building Tkinter accelerator key bindings
 """
 from Tkinter import *
 import tkMessageBox
@@ -49,9 +49,9 @@
         frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
         frameButtons=Frame(self)
         frameButtons.pack(side=BOTTOM,fill=X)
-        self.buttonOk = Button(frameButtons,text='Ok',
-                width=8,command=self.Ok)
-        self.buttonOk.grid(row=0,column=0,padx=5,pady=5)
+        self.buttonOK = Button(frameButtons,text='OK',
+                width=8,command=self.OK)
+        self.buttonOK.grid(row=0,column=0,padx=5,pady=5)
         self.buttonCancel = Button(frameButtons,text='Cancel',
                 width=8,command=self.Cancel)
         self.buttonCancel.grid(row=0,column=1,padx=5,pady=5)
@@ -85,9 +85,13 @@
             self.modifier_checkbuttons[modifier] = check
             column += 1
         labelFnAdvice=Label(self.frameControlsBasic,justify=LEFT,
-                text="Select the desired modifier\n"+
-                     "keys above, and final key\n"+
-                     "from the list on the right.")
+                            text=\
+                            "Select the desired modifier keys\n"+
+                            "above, and the final key from the\n"+
+                            "list on the right.\n\n" +
+                            "Use upper case Symbols when using\n" +
+                            "the Shift modifier.  (Letters will be\n" +
+                            "converted automatically.)")
         labelFnAdvice.grid(row=1,column=0,columnspan=4,padx=2,sticky=W)
         self.listKeysFinal=Listbox(self.frameControlsBasic,width=15,height=10,
                 selectmode=SINGLE)
@@ -102,17 +106,19 @@
         self.buttonClear.grid(row=2,column=0,columnspan=4)
         labelTitleAdvanced = Label(self.frameKeySeqAdvanced,justify=LEFT,
                 text="Enter new binding(s) for  '"+self.action+"' :\n"+
-                "(will not be checked for validity)")
+                "(These bindings will not be checked for validity!)")
         labelTitleAdvanced.pack(anchor=W)
         self.entryKeysAdvanced=Entry(self.frameKeySeqAdvanced,
                 textvariable=self.keyString)
         self.entryKeysAdvanced.pack(fill=X)
         labelHelpAdvanced=Label(self.frameHelpAdvanced,justify=LEFT,
-            text="Key bindings are specified using tkinter key id's as\n"+
+            text="Key bindings are specified using Tkinter keysyms as\n"+
                  "in these samples: <Control-f>, <Shift-F2>, <F12>,\n"
-                 "<Control-space>, <Meta-less>, <Control-Alt-Shift-x>.\n\n"+
-                 "'Emacs style' multi-keystroke bindings are specified as\n"+
-                 "follows: <Control-x><Control-y> or <Meta-f><Meta-g>.\n\n"+
+                 "<Control-space>, <Meta-less>, <Control-Alt-Shift-X>.\n"
+                 "Upper case is used when the Shift modifier is present!\n\n" +
+                 "'Emacs style' multi-keystroke bindings are specified as\n" +
+                 "follows: <Control-x><Control-y>, where the first key\n" +
+                 "is the 'do-nothing' keybinding.\n\n" +
                  "Multiple separate bindings for one action should be\n"+
                  "separated by a space, eg., <Alt-v> <Meta-v>." )
         labelHelpAdvanced.grid(row=0,column=0,sticky=NSEW)
@@ -149,20 +155,12 @@
         self.BuildKeyString()
 
     def BuildKeyString(self):
-        keyList=[]
-        modifiers=self.GetModifiers()
-        finalKey=self.listKeysFinal.get(ANCHOR)
-        if modifiers: modifiers[0]='<'+modifiers[0]
-        keyList=keyList+modifiers
+        keyList = modifiers = self.GetModifiers()
+        finalKey = self.listKeysFinal.get(ANCHOR)
         if finalKey:
-            if (not modifiers) and (finalKey not
-                    in self.alphanumKeys+self.punctuationKeys):
-                finalKey='<'+self.TranslateKey(finalKey)
-            else:
-                finalKey=self.TranslateKey(finalKey)
-            keyList.append(finalKey+'>')
-        keyStr=string.join(keyList,'-')
-        self.keyString.set(keyStr)
+            finalKey = self.TranslateKey(finalKey, modifiers)
+            keyList.append(finalKey)
+        self.keyString.set('<' + string.join(keyList,'-') + '>')
 
     def GetModifiers(self):
         modList = [variable.get() for variable in self.modifier_vars]
@@ -190,9 +188,10 @@
                 self.whitespaceKeys+self.editKeys+self.moveKeys)
         self.listKeysFinal.insert(END, *keys)
 
-    def TranslateKey(self,key):
-        #translate from key list value to tkinter key-id
-        translateDict={'~':'asciitilde','!':'exclam','@':'at','#':'numbersign',
+    def TranslateKey(self, key, modifiers):
+        "Translate from keycap symbol to the Tkinter keysym"
+        translateDict = {'Space':'space',
+                '~':'asciitilde','!':'exclam','@':'at','#':'numbersign',
                 '%':'percent','^':'asciicircum','&':'ampersand','*':'asterisk',
                 '(':'parenleft',')':'parenright','_':'underscore','-':'minus',
                 '+':'plus','=':'equal','{':'braceleft','}':'braceright',
@@ -200,14 +199,16 @@
                 ':':'colon',',':'comma','.':'period','<':'less','>':'greater',
                 '/':'slash','?':'question','Page Up':'Prior','Page Down':'Next',
                 'Left Arrow':'Left','Right Arrow':'Right','Up Arrow':'Up',
-                'Down Arrow': 'Down'}
+                'Down Arrow': 'Down', 'Tab':'tab'}
         if key in translateDict.keys():
-            key=translateDict[key]
-        key='Key-'+key
+            key = translateDict[key]
+        if 'Shift' in modifiers and key in string.ascii_lowercase:
+            key = key.upper()
+        key = 'Key-' + key
         return key
 
-    def Ok(self, event=None):
-        if self.KeysOk():
+    def OK(self, event=None):
+        if self.KeysOK():
             self.result=self.keyString.get()
             self.destroy()
 
@@ -215,40 +216,39 @@
         self.result=''
         self.destroy()
 
-    def KeysOk(self):
-        #simple validity check
-        keysOk=1
-        keys=self.keyString.get()
+    def KeysOK(self):
+        "Validity check on user's keybinding selection"
+        keys = self.keyString.get()
         keys.strip()
-        finalKey=self.listKeysFinal.get(ANCHOR)
-        modifiers=self.GetModifiers()
-        keySequence=keys.split()#make into a key sequence list for overlap check
-        if not keys: #no keys specified
-            tkMessageBox.showerror(title='Key Sequence Error',
-                    message='No keys specified.')
-            keysOk=0
-        elif not keys.endswith('>'): #no final key specified
-            tkMessageBox.showerror(title='Key Sequence Error',
-                    message='No final key specified.')
-            keysOk=0
-        elif (not modifiers) and (finalKey in
-                self.alphanumKeys+self.punctuationKeys):
-            #modifier required
-            tkMessageBox.showerror(title='Key Sequence Error',
-                    message='No modifier key(s) specified.')
-            keysOk=0
-        elif (modifiers==['Shift']) and (finalKey not
-                in self.functionKeys+('Tab',)):
-            #shift alone is only a useful modifier with a function key
-            tkMessageBox.showerror(title='Key Sequence Error',
-                    message='Shift alone is not a useful modifier '+
-                            'when used with this final key key.')
-            keysOk=0
-        elif keySequence in self.currentKeySequences: #keys combo already in use
-            tkMessageBox.showerror(title='Key Sequence Error',
-                    message='This key combination is already in use.')
-            keysOk=0
-        return keysOk
+        finalKey = self.listKeysFinal.get(ANCHOR)
+        modifiers = self.GetModifiers()
+        # create a key sequence list for overlap check:
+        keySequence = keys.split()
+        keysOK = False
+        title = 'Key Sequence Error'
+        if not keys:
+            tkMessageBox.showerror(title=title, parent=self,
+                                   message='No keys specified.')
+        elif not keys.endswith('>'):
+            tkMessageBox.showerror(title=title, parent=self,
+                                   message='Missing the final Key')
+        elif not modifiers and finalKey not in self.functionKeys:
+            tkMessageBox.showerror(title=title, parent=self,
+                                   message='No modifier key(s) specified.')
+        elif (modifiers == ['Shift']) \
+                 and (finalKey not in
+                      self.functionKeys + ('Tab', 'Space')):
+            msg = 'The shift modifier by itself may not be used with' \
+                  ' this key symbol; only with F1-F12, Tab, or Space'
+            tkMessageBox.showerror(title=title, parent=self,
+                                   message=msg)
+        elif keySequence in self.currentKeySequences:
+            msg = 'This key combination is already in use.'
+            tkMessageBox.showerror(title=title, parent=self,
+                                   message=msg)
+        else:
+            keysOK = True
+        return keysOK
 
 if __name__ == '__main__':
     #test the dialog
