diff --git a/dev/js/src/match/relations.js b/dev/js/src/match/relations.js
index 92be073..921c699 100644
--- a/dev/js/src/match/relations.js
+++ b/dev/js/src/match/relations.js
@@ -23,6 +23,7 @@
       this._arcs    = [];
       this._tokenElements = [];
       this._y = 0;
+      this._currentInFocus = undefined;
 
       // Some configurations
       this.maxArc      = 200; // maximum height of the bezier control point
@@ -271,7 +272,6 @@
         endPos = this._tokenPoint(this._tokenElements[arc.last]);
       };
 
-
       startPos -= this.offsetLeft;
       endPos -= this.offsetLeft;
 
@@ -333,16 +333,19 @@
       var middleY = (((startY + controlY) / 2) + controlY) / 2;
 
       // Create a boxed label
-      g = this._c("g");
-      g.setAttribute("class", "label");
-      this._labelsElement.appendChild(g);
+      var label = this._c("g");
+      label.setAttribute("class", "label");
+      this._labelsElement.appendChild(label);
+
+      // Set arc reference
+      label.arcRef = g;
 
       var that = this;
-      g.addEventListener('mouseenter', function () {
-        that._labelsElement.appendChild(this);
+      label.addEventListener('mouseenter', function () {
+        that.inFocus(this);
       });
 
-      var labelE = g.appendChild(this._c("text"));
+      var labelE = label.appendChild(this._c("text"));
       labelE.setAttribute("x", x + middle);
       labelE.setAttribute("y", middleY + 3);
       labelE.setAttribute("text-anchor", "middle");
@@ -354,7 +357,7 @@
       var textHeight = labelBox.height; // labelE.getComputedTextLength();
 
       // Add box with padding to left and right
-      var labelR = g.insertBefore(this._c("rect"), labelE);
+      var labelR = label.insertBefore(this._c("rect"), labelE);
       var boxWidth = textWidth + 2 * this.xPadding;
       labelR.setAttribute("x", x + middle - (boxWidth / 2));
       labelR.setAttribute("ry", 5);
@@ -408,6 +411,29 @@
       this._tokens.push(token);
       return this;
     },
+
+
+    // Move label and arc in focus
+    inFocus : function (element) {
+      var cif;
+
+      if (this._currentInFocus) {
+
+        // Already in focus
+        if (this._currentInFocus === element)
+          return;
+
+        cif = this._currentInFocus;
+        cif.classList.remove('infocus');
+        cif.arcRef.classList.remove('infocus');
+      };
+
+      cif = this._currentInFocus = element;
+      this._labelsElement.appendChild(cif);
+      this._arcsElement.appendChild(cif.arcRef);
+      cif.classList.add('infocus');
+      cif.arcRef.classList.add('infocus');
+    },
     
     /*
      * All arcs need to be sorted before shown,
