diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js
index d800526178df5d6192e1ac2716ec6c265dfa3ca8..65cca1b5b04fd99e8f6edf5241adca957652c5d2 100644
--- a/pd/nw/pd_canvas.js
+++ b/pd/nw/pd_canvas.js
@@ -102,7 +102,7 @@ function permission_to_paste_from_external_clipboard() {
 function nw_window_focus_callback() {
     // on OSX, update the menu on focus
     if (process.platform === "darwin") {
-        nw_create_patch_window_menus(gui, window, name);
+        nw_create_patch_window_menus(gui, window, canvas_events.get_id());
     }
 }
 
@@ -134,7 +134,7 @@ var canvas_events = (function() {
         scalar_draggables = {}, // elements of a scalar which have the "drag" event enabled
         draggable_elem,         // last scalar we dragged
         last_draggable_x,       // last x coord for the element we're dragging
-        last_draggable_y,       // last y 
+        last_draggable_y,       // last y
         previous_state = "none", /* last state, excluding explicit 'none' */
         match_words_state = false,
         last_search_term = "",
@@ -414,9 +414,9 @@ var canvas_events = (function() {
             },
             text_paste: function(evt) {
                 pdgui.post("text paste detected...");
-                evt.preventDefault;
+                evt.preventDefault();
                 document.execCommand("insertText", false,
-                    e.clipboardData.getData("text"));
+                    evt.clipboardData.getData("text"));
             },
             floating_text_click: function(evt) {
                 if (target_is_scrollbar(evt)) {
@@ -644,18 +644,18 @@ var canvas_events = (function() {
     //);
     document.querySelector("#openpanel_dialog").addEventListener("change",
         function(evt) {
-            var file_string = this.value;
+            var file_string = evt.target.value;
             // reset value so that we can open the same file twice
-            this.value = null;
+            evt.target.value = null;
             pdgui.file_dialog_callback(file_string);
             console.log("tried to openpanel something");
         }, false
     );
     document.querySelector("#savepanel_dialog").addEventListener("change",
         function(evt) {
-            var file_string = this.value;
+            var file_string = evt.target.value;
             // reset value so that we can open the same file twice
-            this.value = null;
+            evt.target.value = null;
             pdgui.file_dialog_callback(file_string);
             console.log("tried to savepanel something");
         }, false
@@ -691,12 +691,12 @@ var canvas_events = (function() {
 
     return {
         none: function() {
-            var evt_name;
+            var evt_name, prop;
             if (state !== "none") {
                 previous_state = state;
             }
             state = "none";
-            for (var prop in events) {
+            for (prop in events) {
                 if (events.hasOwnProperty(prop)) {
                     evt_name = prop.split("_");
                     evt_name = evt_name[evt_name.length - 1];
@@ -769,6 +769,9 @@ var canvas_events = (function() {
         register: function(n) {
             name = n;
         },
+        get_id: function() {
+            return name;
+        },
         get_state: function() {
             return state;
         },
@@ -786,7 +789,7 @@ var canvas_events = (function() {
             scalar_draggables[tag] = {
                 cid: cid,
                 scalar_sym: scalar_sym,
-                drawcommand_sym, drawcommand_sym,
+                drawcommand_sym: drawcommand_sym,
                 event_name: event_name
             };
         },
@@ -802,7 +805,7 @@ var canvas_events = (function() {
             pdgui.pdsend(name, "dirty 0");
             pdgui.pdsend(cid, "menuclose", force);
         }
-    }
+    };
 }());
 
 // Stop-gap translator. We copy/pasted this in each dialog, too. It
@@ -824,7 +827,6 @@ function translate_form() {
 // It provides us with our canvas id from the C side.  Once we have it
 // we can create the menu and register event callbacks
 function register_window_id(cid, attr_array) {
-    name = cid; // hack
     // We create the window menus and popup menu before doing anything else
     // to ensure that we don't try to set the svg size before these are done.
     // Otherwise we might set the svg size to the window viewport, only to have
@@ -1001,14 +1003,14 @@ function nw_create_patch_window_menus(gui, w, name) {
         click: function () {
             pdgui.canvas_check_geometry(name); // should this go in menu_save?
             pdgui.menu_save(name);
-        },
+        }
     });
     minit(m.file.saveas, {
         enabled: true,
         click: function (){
             pdgui.canvas_check_geometry(name);
             pdgui.menu_saveas(name);
-        },
+        }
     });
     minit(m.file.message, {
         click: function() { pdgui.menu_send(name); }
@@ -1018,7 +1020,7 @@ function nw_create_patch_window_menus(gui, w, name) {
         click: function() { pdgui.menu_close(name); }
     });
     minit(m.file.quit, {
-        click: pdgui.menu_quit,
+        click: pdgui.menu_quit
     });
 
     // Edit menu