diff --git a/IPython/html/static/notebook/js/kernelselector.js b/IPython/html/static/notebook/js/kernelselector.js
index 6c4845e..732e4c2 100644
--- a/IPython/html/static/notebook/js/kernelselector.js
+++ b/IPython/html/static/notebook/js/kernelselector.js
@@ -26,7 +26,7 @@ define([
         IPython.kernelselector = this;
         this._finish_load = null;
         this._loaded = false;
-        this.loaded = new Promise(function(resolve, reject) {
+        this.loaded = new Promise(function(resolve) {
             that._finish_load = resolve;
         });
         
@@ -38,16 +38,12 @@ define([
         utils.promising_ajax(url).then($.proxy(this._got_kernelspecs, this));
     };
     
-    KernelSelector.prototype._got_kernelspecs = function(data) {
-        var that = this;
-        this.kernelspecs = data.kernelspecs;
-        var change_kernel_submenu = $("#menu-change-kernel-submenu");
-        var new_notebook_submenu = $("#menu-new-notebook-submenu");
-        
-        var keys = Object.keys(data.kernelspecs).sort(function (a, b) {
+    var _sorted_names = function(kernelspecs) {
+        // sort kernel names
+        return Object.keys(kernelspecs).sort(function (a, b) {
             // sort by display_name
-            var da = data.kernelspecs[a].spec.display_name;
-            var db = data.kernelspecs[b].spec.display_name;
+            var da = kernelspecs[a].spec.display_name;
+            var db = kernelspecs[b].spec.display_name;
             if (da === db) {
                 return 0;
             } else if (da > db) {
@@ -56,6 +52,14 @@ define([
                 return -1;
             }
         });
+    };
+    
+    KernelSelector.prototype._got_kernelspecs = function(data) {
+        var that = this;
+        this.kernelspecs = data.kernelspecs;
+        var change_kernel_submenu = $("#menu-change-kernel-submenu");
+        var new_notebook_submenu = $("#menu-new-notebook-submenu");
+        var keys = _sorted_names(data.kernelspecs);
         
         keys.map(function (key) {
             // Create the Kernel > Change kernel submenu
@@ -160,7 +164,7 @@ define([
         /** set the kernel by name, ensuring kernelspecs have been loaded, first 
         
         kernel can be just a kernel name, or a notebook kernelspec metadata
-        (name, project_name, display_name).
+        (name, language_name, display_name).
         */
         var that = this;
         if (typeof selected === 'string') {
@@ -183,18 +187,28 @@ define([
             // only trigger event if value changed
             return;
         }
-        var ks = this.kernelspecs[selected.name];
+        var kernelspecs = this.kernelspecs;
+        var ks = kernelspecs[selected.name];
         if (ks === undefined) {
-            if (selected.project_name && selected.project_name.length > 0) {
-                $.map(this.kernelspecs, function (k) {
-                    if (k.spec.project_name === selected.project_name) {
-                        ks = k;
+            var available = _sorted_names(kernelspecs);
+            var matches = [];
+            if (selected.language_name && selected.language_name.length > 0) {
+                $.map(available, function (name) {
+                    if (kernelspecs[name].spec.language_name.toLowerCase() === selected.language_name.toLowerCase()) {
+                        matches.push(name);
                     }
                 });
             }
+            if (matches.length === 1) {
+                ks = kernelspecs[matches[0]];
+            }
             // if still undefined, trigger failure event
             if (ks === undefined) {
-                this.events.trigger("spec_not_found.Kernel", selected);
+                this.events.trigger("spec_not_found.Kernel", {
+                    selected: selected,
+                    matches: matches,
+                    available: available,
+                });
                 return;
             }
         }
@@ -210,15 +224,22 @@ define([
         var that = this;
         var select = $("<select>").addClass('form-control');
         console.warn("Kernelspec not found:", data);
-        $.map(this.kernelspecs, function (ks) {
+        var names;
+        if (data.matches.length > 1) {
+            names = data.matches;
+        } else {
+            names = data.available;
+        }
+        $.map(names, function (name) {
+            var ks = that.kernelspecs[name];
             select.append(
-                $('<option/>').attr('value', ks.name).text(ks.spec.display_name)
+                $('<option/>').attr('value', ks.name).text(ks.spec.display_name || ks.name)
             );
         });
         
         var body = $("<form>").addClass("form-inline").append(
             $("<span>").text(
-                "I couldn't find a kernel matching " + (data.display_name || data.name) + "." +
+                "I couldn't find a kernel matching " + (data.selected.display_name || data.name) + "." +
                 " Please select a kernel:"
             )
         ).append(select);
diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js
index 81e8786..7a9ad3b 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -249,7 +249,7 @@ define([
             that.metadata.kernelspec = {
                 name: data.name,
                 display_name: data.spec.display_name,
-                project_name: data.spec.project_name,
+                language_name: data.spec.language_name,
             };
             // start session if the current session isn't already correct
             if (!(this.session && this.session.kernel && this.session.kernel.name === data.name)) {
diff --git a/IPython/kernel/kernelspec.py b/IPython/kernel/kernelspec.py
index f6b5f2f..2934ea4 100644
--- a/IPython/kernel/kernelspec.py
+++ b/IPython/kernel/kernelspec.py
@@ -36,7 +36,7 @@ def _pythonfirst(s):
 class KernelSpec(HasTraits):
     argv = List()
     display_name = Unicode()
-    project_name = Unicode()
+    language_name = Unicode()
     env = Dict()
     resource_dir = Unicode()
     
@@ -55,7 +55,7 @@ class KernelSpec(HasTraits):
         d = dict(argv=self.argv,
                  env=self.env,
                  display_name=self.display_name,
-                 project_name=self.project_name,
+                 language_name=self.language_name,
                 )
 
         return d
@@ -114,7 +114,7 @@ class KernelSpecManager(HasTraits):
         return {
                 'argv': make_ipkernel_cmd(),
                 'display_name': 'Python %i' % (3 if PY3 else 2),
-                'project_name': 'ipython',
+                'language_name': 'python',
                }
 
     @property