diff --git a/ui/index.html b/ui/index.html
index a6f47f48..a1fe8a0b 100755
--- a/ui/index.html
+++ b/ui/index.html
@@ -313,15 +313,18 @@ body {
 
 
 /* this is for sliding stuff */
-.viewer {
+.viewer.help-mode {
 	box-shadow: 0px 0px 50px 0px silver;
 }
 
 /* help */
 .keyboard-help {
-	margin: 20px;
+	width: 80%;
+	margin-top: 20px;
+	margin-left: 15%;
+	margin-right: 5%;
+	margin-bottom: 100px;
 }
-
 .keyboard-help .section-doc {
 	font-size: small;
 	vertical-align: top;
@@ -341,6 +344,11 @@ body {
 	color: gray;
 	font-style: italic;
 	padding-right: 20px;
+	padding-left: 10px;
+}
+.keyboard-help .section-doc td:only-child {
+	padding-right: 0px;
+	padding-left: 0px;
 }
 
 
diff --git a/ui/keybindings3.js b/ui/keybindings3.js
index a4ebb7d4..a1eca6ed 100755
--- a/ui/keybindings3.js
+++ b/ui/keybindings3.js
@@ -26,19 +26,29 @@ var KEYBOARD_CONFIG = {
 				toggleImageProportions() 
 				centerRibbons()
 			}),
+		Esc: doc('Exit single image mode', 
+				function(){ toggleSingleImageMode('off') }),
+		Q: 'Esc',
 	},
 
-	'.overlay:visible':{
-		title: 'Overlay',
+
+	'.help-mode':{
+		title: 'Help',
 		doc: 'NOTE: In this mode all other key bindings are disabled, except '+
 			'the ones explicitly defined here.',
 		ignore: '*',
-		Esc: doc('Close overlay',
-			function(){
-				$('.overlay').click()
-			}),
+
+		Esc: doc('Close help',
+			function(){ toggleKeyboardHelp('off') }),
+		H: 'Esc',
+		Q: 'Esc',
+		// '?'
+		'/': { 
+				shift: 'Esc', 
+			},
 	},
 
+
 	// general setup...
 	'.viewer:not(.overlay)': {
 		title: 'Global',
@@ -287,71 +297,12 @@ var KEYBOARD_CONFIG = {
 
 		F4: doc('Open image in external software', openImage),
 
-		// XXX make this generic...
-		H: {
-				default: doc('Show keyboard bindings',
-					function(){
-						var body = $(document.body)
-
-						// remove helo when we scroll to the top...
-						var scroll_handler = function(){
-							if(body.scrollTop() <= 0){
-								$('.keyboard-help')
-									.remove()
-								$('.viewer')
-									.removeClass('overlay')
-								body
-									.click()
-								$(window)
-									.off('scroll', scroll_handler)
-							}
-						}
-
-						// prepare and cleanup...
-						$('.keyboard-help').remove()
-						$('.viewer').addClass('overlay')
-
-						// build the help...
-						var doc = buildKeybindingsHelpHTML(KEYBOARD_CONFIG)
-							.css({
-								cursor: 'hand',
-							})
-							.appendTo(body)
-
-						// add exit by click...
-						body
-							.one('click', function(){
-								body
-									.animate({
-										scrollTop: 0,
-									}, function(){
-										$('.keyboard-help')
-											.remove()
-										$('.viewer')
-											.removeClass('overlay')
-										$(window)
-											.off('scroll', scroll_handler)
-									})
-							})
-
-						// scroll to the help...
-						// NOTE: need to set the scroll handler AFTER we 
-						// 		scroll down, or it will be more of a 
-						// 		tease than a help...
-						var t = getRelativeVisualPosition($('.viewer'), doc).top
-						body
-							.animate({
-								scrollTop: Math.abs(t) - 40,
-							}, function(){
-								$(window)
-									.on('scroll', scroll_handler)
-							})
-					}),
-			},
+		H: doc('Show keyboard bindings',
+			function(){ toggleKeyboardHelp() }),
 		// '?'
 		'/': { 
 				shift: 'H', 
-		},
+			},
 	}
 }
 
diff --git a/ui/modes.js b/ui/modes.js
index 242762aa..18eec60a 100755
--- a/ui/modes.js
+++ b/ui/modes.js
@@ -72,6 +72,72 @@ function toggleImageProportions(mode){
 }
 
 
+var toggleKeyboardHelp = createCSSClassToggler('.viewer', 'help-mode overlay',
+		function(action){
+			var body = $(document.body)
+			var win = $(window)
+
+			// on...
+			if(action == 'on'){
+				// remove helo when we scroll to the top...
+				var scroll_handler = function(){
+					if(body.scrollTop() <= 0){
+						toggleKeyboardHelp('off')
+					}
+				}
+
+				// prepare and cleanup...
+				$('.keyboard-help').remove()
+				$('.viewer').addClass('overlay')
+
+				// build the help...
+				var doc = buildKeybindingsHelpHTML(KEYBOARD_CONFIG)
+					.css({
+						cursor: 'hand',
+					})
+					.appendTo(body)
+
+				// add exit by click...
+				body
+					.one('click', function(){
+						toggleKeyboardHelp('off')
+					})
+
+				// scroll to the help...
+				// NOTE: need to set the scroll handler AFTER we 
+				// 		scroll down, or it will be more of a 
+				// 		tease than a help...
+				var t = getRelativeVisualPosition($('.viewer'), doc).top
+				body
+					.animate({
+						scrollTop: Math.abs(t) - 40,
+					}, function(){
+						win
+							.on('scroll', scroll_handler)
+					})
+
+			// off...
+			} else {
+				var _cleanup = function(){
+					$('.keyboard-help').remove()
+					$('.viewer').removeClass('overlay')
+					body.click()
+					win.off('scroll', scroll_handler)
+				}
+
+				if(body.scrollTop() > 0){
+						body
+							.animate({
+								scrollTop: 0,
+							}, _cleanup) 
+				} else {
+					_cleanup()
+				}
+			}
+		})
+
+
+
 
 /**********************************************************************
 * vim:set ts=4 sw=4 :                                                */