diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 71a292e6fb575178191ea945c14908c29ca4c6b9..637a62c49481951168429b0a134f09c89ff4f334 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -1423,14 +1423,31 @@ function gui_configure_io(cid, tag, is_iemgui, is_signal, width) {
         }
         // remove xlet_selected tag
         xlet.classList.remove("xlet_selected");
+        if (xlet_anim) {
+            xlet_anim.cancel();
+        }
     }
 }
 
+var xlet_anim;
 function gui_highlight_io(cid, tag) {
     var xlet = get_item(cid, tag);
     // must check for null (see gui_configure_io)
     if (xlet !== null) {
         xlet.classList.add("xlet_selected");
+        if (!xlet_anim || xlet_anim.playState === "finished" ||
+            xlet_anim.playState === "idle") {
+            xlet_anim = xlet.animate(
+                [{"stroke-width":"3"},
+                 {"stroke-width":"7"},
+                 {"stroke-width":"3"},
+                ],
+                { duration: 400,
+                  delay: 45,
+                  iterations: Infinity,
+                  easing: "ease-in-out" }
+            );
+        }
     }
 }