diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js
index 5d08b63a35c11781cf6d194135c15cfecf5ce676..568576022bdb95829ed5aec2ee1d60d79dfdf53c 100644
--- a/pd/nw/pd_canvas.js
+++ b/pd/nw/pd_canvas.js
@@ -65,6 +65,7 @@ pdgui.gui_post("flub!");
 var canvas_events = (function() {
     var name,
         state,
+        previous_state = 'none', /* last state, excluding explicit 'none' */
         match_words_state = false,
         last_search_term = '',
         svg_view = document.getElementById('patchsvg').viewBox.baseVal,
@@ -373,6 +374,9 @@ var canvas_events = (function() {
     return {
         none: function() {
             var name;
+            if (state !== 'none') {
+                previous_state = state;
+            }
             state = 'none';
             for (var prop in events) {
                 if (events.hasOwnProperty(prop)) {
@@ -383,7 +387,6 @@ var canvas_events = (function() {
             }
         },
         normal: function() {
-            //pdgui.gui_post("resetting to normal...");
             this.none();
 
             document.addEventListener("mousemove", events.mousemove, false);
@@ -423,6 +426,7 @@ var canvas_events = (function() {
         search: function() {
             this.none();
             document.addEventListener("keydown", events.find_keydown, false);
+            state = 'search';
         },
         register: function(n) {
             name = n;
@@ -430,6 +434,9 @@ var canvas_events = (function() {
         get_state: function() {
             return state;
         },
+        get_previous_state: function() {
+            return previous_state;
+        },
         set_obj: function() {
             utils.set_obj();
         },
@@ -838,6 +845,8 @@ function nw_create_patch_window_menus(name) {
                 canvas_events.search();
             } else {
                 find_bar.style.setProperty('display', 'none');
+// this is wrong and causes bug... we need to set back to whatever state
+// we used to be in... probably need a last_state var
                 canvas_events.none();
             }
         },
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 53c9bed9600a889e87be727253cc71d0542972b2..aa747a4e3e2e21e362d7f1cb626be42736df1c57 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -2963,7 +2963,13 @@ function gui_textarea(cid, tag, type, x, y, max_char_width, text,
         if (p !== null) {
             p.parentNode.removeChild(p);
         }
-        patchwin[cid].window.canvas_events.normal();
+// this is wrong and causes bug... we need it to go back to previous state
+        if (patchwin[cid].window.canvas_events.get_previous_state() === 
+               'search') {
+            patchwin[cid].window.canvas_events.search();
+        } else { 
+            patchwin[cid].window.canvas_events.normal();
+        }
     }
 }