diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js b/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
index fe30587..15c5463 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Layout.js
@@ -169,14 +169,11 @@
 
                         t2zs.panAndZoom([x, y], scale, 1000);
                     },
+                    setLinkPosition: function (link) {
+                        link.setPosition.bind(link)();
+                    },
                     tick: function () {
 
-                        this.link
-                            .attr("x1", function (d) { return d.get('source').x; })
-                            .attr("y1", function (d) { return d.get('source').y; })
-                            .attr("x2", function (d) { return d.get('target').x; })
-                            .attr("y2", function (d) { return d.get('target').y; });
-
                         this.node
                             .attr({
                                 transform: function (d) {
@@ -185,6 +182,13 @@
                                     return sus.translate(dx, dy);
                                 }
                             });
+
+                        this.link
+                            .each(this.setLinkPosition)
+                            .attr("x1", function (d) { return d.get('position').x1; })
+                            .attr("y1", function (d) { return d.get('position').y1; })
+                            .attr("x2", function (d) { return d.get('position').x2; })
+                            .attr("y2", function (d) { return d.get('position').y2; });
                     },
 
                     start: function () {
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
index 4897052..d3f449c 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2Link.js
@@ -211,6 +211,28 @@
                 this.set('enhanced', false);
                 d3.select('.topo2-portLabels').selectAll('.portLabel').remove();
             },
+            setPosition: function () {
+                this.set({
+                    position: {
+                        x1: this.get('source').x,
+                        y1: this.get('source').y,
+                        x2: this.get('target').x,
+                        y2: this.get('target').y
+                    }
+                });
+
+                if (this.get('enhanced')) {
+                    this.updatePortPosition();
+                }
+            },
+            updatePortPosition: function () {
+                var sourcePos = this.locatePortLabel(1),
+                    targetPos = this.locatePortLabel();
+                d3.select('#topo2-port-src')
+                    .attr('transform', sus.translate(sourcePos.x, sourcePos.y));
+                d3.select('#topo2-port-tgt')
+                    .attr('transform', sus.translate(targetPos.x, targetPos.y));
+            },
             getSelected: function () {
                 return this.collection.filter(function (m) {
                     return m.get('selected');
