diff --git a/src/libs/libiveditor/itemeditor/ivitemmodel.cpp b/src/libs/libiveditor/itemeditor/ivitemmodel.cpp
index 212f956fda67fd71b842605ac67a818711bcb48e..9f45e2b384e7b715c232fb2aabdeabc8674a85df 100644
--- a/src/libs/libiveditor/itemeditor/ivitemmodel.cpp
+++ b/src/libs/libiveditor/itemeditor/ivitemmodel.cpp
@@ -433,7 +433,51 @@ void IVItemModel::setupInterfaceGeometry(ivm::IVObject *obj)
     obj->setEntityProperty(ivm::meta::Props::token(token), strCoord);
 }
 
-void IVItemModel::setupConnectionGeometry(ivm::IVObject *obj) { }
+void IVItemModel::setupConnectionGeometry(ivm::IVObject *obj)
+{
+    const ivm::meta::Props::Token token = obj->parentObject() && obj->parentObject()->isRootObject()
+            ? ivm::meta::Props::Token::InnerCoordinates
+            : ivm::meta::Props::Token::coordinates;
+
+    if (obj->hasEntityAttribute(ivm::meta::Props::token(token))) {
+        return;
+    }
+
+    ivm::IVConnection *connection = qobject_cast<ivm::IVConnection *>(obj);
+    if (!connection) {
+        return;
+    }
+    ivm::IVInterface *startEndPoint = connection->sourceInterface();
+    if (!startEndPoint || !startEndPoint->function()) {
+        return;
+    }
+    ivm::IVInterface *endEndPoint = connection->targetInterface();
+    if (!endEndPoint || !endEndPoint->function()) {
+        return;
+    }
+
+    const QPointF startPos = shared::graphicsviewutils::pos(startEndPoint->coordinates());
+    const QPointF endPos = shared::graphicsviewutils::pos(endEndPoint->coordinates());
+    const QRectF startRect = shared::graphicsviewutils::rect(startEndPoint->function()->coordinates());
+    const QRectF endRect = shared::graphicsviewutils::rect(endEndPoint->function()->coordinates());
+
+    QList<QRectF> siblingRects;
+    for (auto entity : objectsModel()->objects()) {
+        if (entity->parentObject() == connection->parentObject()) {
+            ivm::IVObject *iObj = qobject_cast<ivm::IVObject *>(entity);
+            if (!iObj)
+                continue;
+
+            if (kRectangularTypes.contains(iObj->type())) {
+                siblingRects.append(shared::graphicsviewutils::rect(iObj->coordinates()));
+            }
+        }
+    }
+
+    const QVector<QPointF> points =
+            shared::graphicsviewutils::createConnectionPath(siblingRects, startPos, startRect, endPos, endRect);
+    connection->setCoordinates(shared::graphicsviewutils::coordinates(points));
+}
 
 void IVItemModel::setupGeometry(ivm::IVObject *obj)
 {