diff --git a/IPython/html/static/base/js/utils.js b/IPython/html/static/base/js/utils.js
index 90eca6e08..723f90add 100644
--- a/IPython/html/static/base/js/utils.js
+++ b/IPython/html/static/base/js/utils.js
@@ -459,6 +459,16 @@ IPython.utils = (function (IPython) {
         return M;
     })();
 
+    // http://stackoverflow.com/questions/11219582/how-to-detect-my-browser-version-and-operating-system-using-javascript
+    var platform = (function () {
+        var OSName="Unknown OS";
+        if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
+        if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
+        if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
+        if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";
+        return OSName
+    })();
+
     var is_or_has = function (a, b) {
         // Is b a child of a or a itself?
         return a.has(b).length !==0 || a.is(b);
@@ -500,6 +510,7 @@ IPython.utils = (function (IPython) {
         splitext : splitext,
         always_new : always_new,
         browser : browser,
+        platform: platform,
         is_or_has : is_or_has,
         is_focused : is_focused
     };
diff --git a/IPython/html/static/notebook/js/keyboardmanager.js b/IPython/html/static/notebook/js/keyboardmanager.js
index b6e09f9c1..8fe5be236 100644
--- a/IPython/html/static/notebook/js/keyboardmanager.js
+++ b/IPython/html/static/notebook/js/keyboardmanager.js
@@ -50,6 +50,7 @@ var IPython = (function (IPython) {
     }
     
     var browser = IPython.utils.browser[0];
+    var platform = IPython.utils.platform;
     
     if (browser === 'Firefox' || browser === 'Opera') {
         $.extend(_keycodes, _mozilla_keycodes);
@@ -78,24 +79,6 @@ var IPython = (function (IPython) {
     // Default keyboard shortcuts
 
     var default_common_shortcuts = {
-        'meta+s' : {
-            help    : 'save notebook',
-            help_index : 'fb',
-            handler : function (event) {
-                IPython.notebook.save_checkpoint();
-                event.preventDefault();
-                return false;
-            }
-        },
-        'ctrl+s' : {
-            help    : 'save notebook',
-            help_index : 'fc',
-            handler : function (event) {
-                IPython.notebook.save_checkpoint();
-                event.preventDefault();
-                return false;
-            }
-        },
         'shift' : {
             help    : '',
             help_index : '',
@@ -130,6 +113,30 @@ var IPython = (function (IPython) {
         }
     }
 
+    if (platform === 'MacOS') {
+        default_common_shortcuts['cmd+s'] =
+            {
+                help    : 'save notebook',
+                help_index : 'fb',
+                handler : function (event) {
+                    IPython.notebook.save_checkpoint();
+                    event.preventDefault();
+                    return false;
+                }
+            };
+    } else {
+        default_common_shortcuts['ctrl+s'] =
+            {
+                help    : 'save notebook',
+                help_index : 'fb',
+                handler : function (event) {
+                    IPython.notebook.save_checkpoint();
+                    event.preventDefault();
+                    return false;
+                }
+            };
+    }
+
     // Edit mode defaults
 
     var default_edit_shortcuts = {
@@ -195,6 +202,48 @@ var IPython = (function (IPython) {
                 return false;
             }
         },
+        'tab' : {
+            help    : 'indent or complete',
+            help_index : 'ec',
+        },
+        'shift+tab' : {
+            help    : 'tooltip',
+            help_index : 'ed',
+        },
+    }
+
+    if (platform === 'MacOS') {
+        default_edit_shortcuts['cmd+/'] =
+            {
+                help    : 'toggle comment',
+                help_index : 'ee'
+            };
+        default_edit_shortcuts['cmd+]'] =
+            {
+                help    : 'indent',
+                help_index : 'ef'
+            };
+        default_edit_shortcuts['cmd+['] =
+            {
+                help    : 'dedent',
+                help_index : 'eg'
+            };
+    } else {
+        default_edit_shortcuts['ctrl+/'] =
+            {
+                help    : 'toggle comment',
+                help_index : 'ee'
+            };
+        default_edit_shortcuts['ctrl+]'] =
+            {
+                help    : 'indent',
+                help_index : 'ef'
+            };
+        default_edit_shortcuts['ctrl+['] =
+            {
+                help    : 'dedent',
+                help_index : 'eg'
+            };
     }
 
     // Command mode defaults
@@ -402,7 +451,7 @@ var IPython = (function (IPython) {
             }
         },
         'shift+o' : {
-            help    : 'toggle output',
+            help    : 'toggle output scroll',
             help_index : 'gc',
             handler : function (event) {
                 IPython.notebook.toggle_output_scroll();
@@ -483,6 +532,14 @@ var IPython = (function (IPython) {
                 return false;
             }
         },
+        'shift+m' : {
+            help    : 'merge cell below',
+            help_index : 'ek',
+            handler : function (event) {
+                IPython.notebook.merge_cell_below();
+                return false;
+            }
+        },
     }
 
 
@@ -500,6 +557,9 @@ var IPython = (function (IPython) {
             var help_string = this._shortcuts[shortcut]['help'];
             var help_index = this._shortcuts[shortcut]['help_index'];
             if (help_string) {
+                if (platform === 'MacOS') {
+                    shortcut = shortcut.replace('meta', 'cmd');
+                }
                 help.push({
                     shortcut: shortcut,
                     help: help_string,
@@ -523,6 +583,7 @@ var IPython = (function (IPython) {
 
     ShortcutManager.prototype.normalize_shortcut = function (shortcut) {
         // Sort a sequence of + separated modifiers into the order alt+ctrl+meta+shift
+        shortcut = shortcut.replace('cmd', 'meta').toLowerCase();
         var values = shortcut.split("+");
         if (values.length === 1) {
             return this.normalize_key(values[0])
diff --git a/IPython/html/static/notebook/js/notificationarea.js b/IPython/html/static/notebook/js/notificationarea.js
index 0f52b7e98..1f1830efa 100644
--- a/IPython/html/static/notebook/js/notificationarea.js
+++ b/IPython/html/static/notebook/js/notificationarea.js
@@ -88,7 +88,7 @@ var IPython = (function (IPython) {
         });
 
         $([IPython.events]).on('status_interrupting.Kernel',function () {
-            knw.set_message("Interrupting kernel");
+            knw.set_message("Interrupting kernel", 2000);
         });
 
         $([IPython.events]).on('status_dead.Kernel',function () {